๋ชจ๋ ํด๋์ค๋ Object ํด๋์ค๋ฅผ ์กฐ์์ผ๋ก ๊ฐ์ง๋ค.
๋ฐ๋ผ์ Object ํด๋์ค์ ๊ตฌํ๋ ๋ฉ์๋๋ค์ ์์๋ฐ์ ์ฌ์ฉํ ์์๋๋ฐ,
๊ทธ ์ค ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ toString, equals, hashCode๋ฅผ ์ฌ์ ์ํ์ฌ
์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณด๋ ค ํ๋ค. ๐ค
๐ toString
toString ๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณ๊ฒฝํด์ค๋ค.
๊ทธ๋ฌ๋ toString ๋ฉ์๋๋ฅผ ์ฌ์ ์ ์์ด ์ฌ์ฉํด๋ณด๋ฉด, ๋ฌธ์์ด์ ๋ด์ฉ์ด ์๋ ์ฃผ์๊ฐ์ ๋ฐํํ๋ ๊ฒ์ ์ ์ ์๋ค.

๐ ๋ฐ๋ผ์ ๋ฌธ์์ด์ ๋ด์ฉ์ ๋ฐํํ๊ธฐ ์ํด์๋ ์ฌ์ ์๊ฐ ํ์ํ๋ค. ๐ฅ
๋จผ์ ์ํ๋ ํด๋์ค(๋์ ๊ฒฝ์ฐ์ Object_toString ํด๋์ค)์์
์ค๋ฅธ์ชฝ ๋ง์ฐ์ค ํด๋ฆญ -> Source -> Generate toString() ... ๋ฅผ ์ ํ,
inherited methods์์ toString()์ ์ฒดํฌํ์ฌ ๋ฉ์๋๋ฅผ ๋ถ๋ฌ์ค์.
๊ทธ๋ผ ์๋์๊ฐ์ด Override ์ ๋ ธํ ์ด์ ๊ณผ ํจ๊ป toString ๋ฉ์๋๊ฐ ํํ๋ ๊ฒ์ด๋ค.
@Override
public String toString() {
return "Object_toString [str=" + str + ", toString()=" + super.toString() + "]";
}
์ฌ๊ธฐ์ ์ด์ ๋ฌธ์์ด์ ๋ด์ฉ์ ์ถ๋ ฅํ ์ ์๋๋ก ํ๊ณ ,
์ํ๋ ๋ฐํ ํํ๋ฅผ ์ค์ ํ์ฌ return ๋ฌธ์ ์์ ํด์ค๋ค.
@Override
public String toString() {
return String.format("%s, ์๋
", str);
}
์์ ๊ฐ์ด String.format ํํ๋ก ํํํด๋ ์ข๊ณ , + ์ฐ์ฐ์๋ฅผ ํ์ฉํด์ ๋ง๋ค์ด์ค๋ ๊ด์ฐฎ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด๋ฉด ์๋์ ๊ฐ์ด
๋ด๊ฐ ์ํ๋ ์ถ๋ ฅ ํํ๋ก ๋ฌธ์์ด์ ๋ด์ฉ์ ๋ฐํํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.

์ด๋ ๊ฒ toString ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ฉด
๋ฌธ์์ด์ ๋ด์ฉ์ ์ถ๋ ฅํ๊ฑฐ๋, ์๋ก์ด ์ถ๋ ฅ ํํ๋ฅผ ์ง์ ํด์ค ์ ์๋ค. ๐
๐ equals
equals ๋ฉ์๋๋ ๋ ๊ฐ์ฒด๊ฐ ๊ฐ์์ง ๋น๊ตํ๋ค.
ํ์ง๋ง equals๋ toString๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๊ฐ์ฒด์ ๋ด์ฉ์ด ์๋ ์ฃผ์๊ฐ์ ๋น๊ตํ๋ค.

๐ ๋ถ๋ช ๊ฐ์ ๋ฌธ์์ด์ ๋ฃ์ด์ฃผ์์ง๋ง false๋ฅผ ๋ฐํํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
(== ์ฐ์ฐ์ ๋ํ ์ฃผ์๊ฐ์ ๋น๊ตํ๋ฏ๋ก ํจ๊ป ์์ฑํด๋ณด์๋ค.)
๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ์๋ ๊ฐ์ฒด์ ๋ด์ฉ์ ๋น๊ตํ๊ธฐ ์ํด์๋ ๋ฉ์๋ ์ฌ์ ์๊ฐ ํ์ํ๋ค.
์ค๋ฅธ์ชฝ ๋ง์ฐ์ค -> Source -> Generate hashCode() and equals() ... -> ๋น๊ตํ ๋ฉค๋ฒ ๋ณ์ ์ ํ
์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก equals ๋ฉ์๋๋ฅผ ๋ถ๋ฌ์จ ๋ค, ์ฌ์ ์ ํด์ฃผ์๋ค.

๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ฑ๊ณต์ ์ผ๋ก ๊ฐ์ฒด์ ๋ด์ฉ์ ๋น๊ตํ์ฌ true๋ฅผ ๋ฆฌํดํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋ผ equals ๋ฉ์๋๋ฅผ ์ด๋ป๊ฒ ์ฌ์ ์ํด์ผ ํ๋์ง ์ดํด๋ณด์.
equals ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ๋๋ ํฌ๊ฒ 3๊ฐ์ง ์กฐ๊ฑด์ ์ง์ผ์ฃผ๋ฉด ์ข๋ค.
- ์ฃผ์๊ฐ ๊ฐ์์ง ํ์ธ
์ฃผ์๊ฐ์ด ๊ฐ๋ค๋ฉด ๋ด์ฉ์ด ๊ฐ์์ง ํ์ธํด์ค ํ์ ์๊ธฐ ๋๋ฌธ - ๋ค์ด์บ์คํ
๊ฐ๋ฅํ์ง ํ์ธ
Object ํ์ ์ผ๋ก ๋ฐ์ ์ธ์๊ฐ ํ ํด๋์ค ํ์ ์ผ๋ก ๋ณํ์ด ๊ฐ๋ฅํ์ง ํ์ธํด์ฃผ์ด์ผํ๋ค.
๋ถ๊ฐํ๋ค๋ฉด ๊ฐ ๋น๊ต ๋ํ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ! - ๋ค์ด์บ์คํ
, ๋ด์ฉ ๋น๊ต
Object ํ์ ์ ์ธ์ obj๋ฅผ ํ ํด๋์ค ํ์ ์ผ๋ก ๋ณํํ๊ณ , ๋ด์ฉ์ด ๊ฐ์์ง ๋ฐํํด์ฃผ๋ฉด ๋๋ค.
(์ด์ ์ ๋ค์ด์บ์คํ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ์ง ์์๋ค๋ฉด ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์์ง๋ง,
์ด๋ฏธ ํ์ธํด์ฃผ์์ผ๋ฏ๋ก 100% ๊ฐ๋ฅํ ๊ฒ์ด๋ค.)
์์ ๊ฐ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋๋ก ์ฌ์ ์ํ๋ค๋ฉด, ์ฑ๊ณต์ ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ์ ์๋ค.
์ด๋ ๊ฒ equals ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด์ ๊ฐ์ฒด์ ๋ด์ฉ์ ๋น๊ตํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๊ณ ,
์ฃผ์๋ฅผ ๋น๊ตํ๊ณ ์ถ์ ๋๋ == ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ฃผ๋ฉด ์ ์ฉํ ๊ฒ์ด๋ค. ๐
๐ฅ ์ฌ๊ธฐ์ ์ง๊ณ ๋์ด๊ฐ ์ ์ด ์๋๋ฐ,
์์์๋ equals ๋ฉ์๋๋ง ์ฌ์ ์ํ์์ง๋ง,
equals ๋ฉ์๋๋ฅผ Generateํ ๋ hashCode๋ ์๋์ผ๋ก ํจ๊ป ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ ํ์ธํ ์ ์์ ๊ฒ์ด๋ค.
์ด๋ equals ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ๋๋ hashCode๋ ๊ฐ์ด ์ฌ์ ์ํ๋ ๊ฒ์ ๊ถ์ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์์ธํ ๋ด์ฉ์ ์๋ hashCode์์ ํ์ธํด๋ณด์!
๐ hashCode
hashCode ๋ฉ์๋๋ ๊ฐ์ฒด์ ํด์ ์ฝ๋๋ฅผ ๋น๊ตํ๋ค.
ํด์ ์ฝ๋๋ ์์คํ ์์ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ ์ ๊ฐ์ ๋งํ๋๋ฐ,
HashSet, HashMap, HashTable ๋ฑ์์ ๊ฐ์ฒด์ ๋์ผ์ฑ์ ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
์์์ ๋งํ๋ฏ equals ๋ฉ์๋์ hashCode ๋ฉ์๋๋ ํจ๊ป ์ฌ์ ์ํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ,
ํจ๊ป ์ฌ์ ์ํ์ง ์์ผ๋ฉด ํด์ ๊ฐ์ ์ฌ์ฉํ๋ Collection์ธ
HashSet, HashMap, HashTable ๋ฑ์ ์ฌ์ฉํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๊ทธ ์ด์ ๋ ํด์ ์ฝ๋ ๊ฐ์ ์ฌ์ฉํ๋ Collection์ด ๊ฐ์ฒด๋ฅผ ๋น๊ตํ๋ ๊ณผ์ ์์ ์ ์ ์๋ค.

hashCode ๋ฉ์๋๋ int ํ์ ์ผ๋ก ํด์ ์ฝ๋ ๊ฐ์ ๋ฐํํ๋๋ฐ,
์ด ๋ฆฌํด๊ฐ์ด ์ผ์นํ๊ณ , equals ๋ฉ์๋์ ๋ฆฌํด๊ฐ์ด true๋ฉด ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฐ์ ๊ฐ์ฒด๋ผ๊ณ ํ๋จํ๋ค.
ํ ๋ง๋๋ก, hashCode ๋จผ์ ๋น๊ตํ๊ณ ! equals ๋น๊ตํด์ค๋ค๋ ๊ฒ
๐ equals๋ก ๋น๊ตํ ๊ฐ์ด ๊ฐ์๋ haseCode๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด๋ก ํ๋จ๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ equals๋ง ์ฌ์ ์ํ๊ณ , hashCode๋ฅผ ์ฌ์ ์ํ์ง ์์ผ๋ฉด
ํด์ ์ฝ๋๋ฅผ ์ด์ฉํ๋ Collection์ ๊ฒฝ์ฐ ๋ด์ฉ์ด ๊ฐ์๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ์ธ์ํ๊ฒ ๋๋ค.
์ด๋ฌํ ์ด์ ๋ก equals ์ฌ์ ์ ์ hashCode๊น์ง ์ฌ์ ์ํ๋ ๊ฒ์ ๊ถ์ฅํ๋ ๊ฒ!
์ด๋ฌํ ๋์ ๋ฐ hashCode ์ฌ์ ์ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์.
์๋๋ equals๋ง ์ฌ์ ์ํ๊ณ , HashSet์ ๊ฐ์ ๋ด์ฉ์ ๊ฐ์ ์ถ๊ฐํ๋ค.

๐ ๊ฐ์ ๋ด์ฉ์ ์ถ๊ฐํ์์๋ ๋ถ๊ตฌํ๊ณ ์ค๋ณต ์ ๊ฑฐ๊ฐ ๋์ง ์์ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
์ด๋ ์์์ ํ์ธํ๋ฏ hashCode ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ง ์์๊ธฐ ๋๋ฌธ์ ์๊ธด ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด hashCode ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด๋ณด์.

๐ ๊ฐ์ ๋ด์ฉ์ ๊ฐ์ง ๊ฐ์ฒด๋ ๊ฐ๋ค๊ณ ํ๋จํ์ฌ 1์ ๋ฐํํ๋ค.
์์ ๊ฐ์ด Objects์ hash ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ฃผ๋ฉด ๊ฐ๋จํ hashCode๋ฅผ ์ฌ์ ์ํด์ค ์ ์๋ค.
hashCode์ ๊ฒฝ์ฐ ํด์ ๊ฐ์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ์ฌ์ ์ํ์ง ์์๋ ๊ด์ฐฎ์ง๋ง,
์ถํ์ ์์ ํ๋ฉฐ ์ฌ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ํ์ด ์์ผ๋ฏ๋ก ํจ๊ป ์ฌ์ ์ ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
๐ ์ ๋ฆฌ
- Object ํด๋์ค๋ ๋ชจ๋ ํด๋์ค์ ์กฐ์์ด๋ฏ๋ก, ํด๋นํ๋ ๋ฉ์๋๋ค์ ์ฌ์ ์ํ๋ฉด ์ ์ฉํ ์ ์๋ค.
- toString ๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ์ฃผ๋๋ฐ, ์๋๋ ์ฃผ์๋ฅผ ๋ฐํํ๋ค.
์ฌ์ ์ํ์ฌ ๋ด์ฉ์ ๋ฐํํ ์ ์๊ฒ ํ๊ฑฐ๋, ์ํ๋ ํ์์ผ๋ก ๋ฐํํ๊ฒ ํ ์ ์๋ค. - equals ๋ฉ์๋๋ ๊ฐ์ฒด๊ฐ ๊ฐ์์ง ๋น๊ตํ๋๋ฐ, ์๋๋ ์ฃผ์๋ฅผ ๋น๊ตํ๋ค.
์ฌ์ ์ํ์ฌ ๋ด์ฉ์ ๋น๊ตํ๋๋ก ํ ์ ์๋ค. - hashCode ๋ฉ์๋๋ ํด์ ๊ฐ์ ์ ์ํ์ผ๋ก ๋ฐํํ๋๋ฐ,
equals์ hashCode๋ ํจ๊ป ์ฌ์ ์ํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
ํด์ ๊ฐ์ ์ฌ์ฉํ๋ Collection์ ๊ฒฝ์ฐ equals ์ด์ ์ hashCode ๋น๊ต๋ฅผ ์ฐ์ ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์
equals๋ง ์ฌ์ ์ํ ๊ฒฝ์ฐ ๊ฐ์ ๋ด์ฉ์ด๋๋ผ๋ ๊ฐ์ ๊ฐ์ฒด๋ก ์ธ์ํ์ง ๋ชปํ๋ค.
์ฐธ๊ณ
- https://velog.io/@sonypark/Java-equals-hascode-%EB%A9%94%EC%84%9C%EB%93%9C%EB%8A%94-%EC%96%B8%EC%A0%9C-%EC%9E%AC%EC%A0%95%EC%9D%98%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C
- https://tecoble.techcourse.co.kr/post/2020-07-29-equals-and-hashCode/
'2๏ธโฃ Java > Java ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Eclipse์์ args ์ด๊ธฐ๊ฐ ์ค์ ๋ฐฉ๋ฒ (0) | 2022.07.04 |
---|---|
[Java] Windows์์ Java ๋ฒ์ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ (0) | 2022.07.03 |
[Java] macOS์์ Eclipse ์คํ ์ค๋ฅ ํด๊ฒฐ ๋ฐฉ๋ฒ (0) | 2022.07.03 |
[Java] macOS์์ Eclipse ์ฌ์ฉ์ ํ๊ธ ์นํ ๋ฌธ์ (0) | 2022.07.03 |
๋๊ธ