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 ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ž.