item 11 leekyunghee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
equals๋ฅผ ์ฌ์ ์ํ๋ ค๊ฑฐ๋ hashCode ๋ ์ฌ์ ์ํ๋ผ.
- ํ๋์ ๊ฐ์ฒด๊ฐ ์์ฑ์ด ๋๊ณ ์ธ์คํด์ค์ equals์ ์ฌ์ฉ๋๋ ์ ๋ณด๊ฐ ๋ฉค๋ฒ๋ณ์ ๋ฐ๋์ง ์์๋ hashcode๋ ๋ช๋ฒ์ ๋ณ๊ฒฝํด๋ ๋์ผํ๋ค.
Object ๋ช ์ธ ๊ท์ฝ
- equals ๋น๊ต์ ์ฌ์ฉ๋๋ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๋์ ๊ทธ ๊ฐ์ฒด์ hashCode ๋ฉ์๋๋ ๋ช๋ฒ์ ํธ์ถํด๋ ์ผ๊ด๋๊ฒ ํญ์ ๊ฐ์ ๊ฐ์ ๋ฐํ ํด์ผ๋๋ค.
- equals(Object)๊ฐ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ค๊ณ ํ๋จํ๋ค๋ฉด ๋๊ฐ์ฒด์ hashCode๋ ๋๊ฐ์ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค.
- ๋ ๊ฐ์ฒด๊ฐ ๋ค๋ฅด๋ค๊ณ ํ๋๋ผ๋ hashCode๊ฐ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๋ฐํํ ํ์๋ ์๋ค.
๋จ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํด์๋ ๋ค๋ฅธ ๊ฐ์ ๋ฐํํด์ผ ํด์ํ ์ด๋ธ์ ์ฑ๋ฅ์ด ์ข์์ง๋ค.
๋ค์ ์์ ์ฝ๋ PhoneNumber ํด๋์ค์ ์ธ์คํด์ค๋ฅผ HashMap์ ์์๋ก ์ฌ์ฉํ๋ค๊ณ ํด๋ณด์.
Map(PhoneNumber, String> m = new HashMap<>();
m.put(new PhoneNumber(707, 867, 5309), "์ ๋");
m.get(new PhoneNumber(707, 867, 5309))๋ฅผ ์คํํ๋ฉด
์ด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ํ๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋ชจ๋ ํฌํจํ ์์ฑ์ ์ค ๊ฐ์ฅ ์งง์ ๊ฒ์ ๊ณจ๋ผ ํธ์ถํ๋ฉด ๋๋ค.
ํต์ฌ ์ ๋ฆฌ
์๋ก ๋ค๋ฅธ ์ธ์คํด์ค๋ผ๋ฉด ๋๋๋ก ํด์์ฝ๋๋ ์๋ก ๋ค๋ฅด๊ฒ ๊ตฌํํด์ผ ํ๋ค.
AutoValue ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์.