์•„์ดํ…œ 11 : equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๋ฉด hashCode๋„ ์žฌ์ •์˜ํ•ด๋ผ

hashCode ์ผ๋ฐ˜ ๊ทœ์•ฝ

  • equals ๋น„๊ต์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ทธ ๊ฐ์ฒด์˜ hashCode ๋ฉ”์„œ๋“œ๋Š” ๋ช‡๋ฒˆ์„ ํ˜ธ์ถœํ•ด๋„ ์ผ๊ด€๋˜๊ฒŒ ํ•ญ์ƒ ๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ. ๋‹จ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค์‹œ ์‹คํ–‰๋˜๋ฉด ์ƒ๊ด€์—†์Œ
  • euqlas(Object)๊ฐ€ ๋‘ ๊ฐ์ฒด๋ฅผ ๊ฐ™๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค๋ฉด, ๋‘ ๊ฐ์ฒด์˜ hashCode๋Š” ๋˜‘๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ
  • equals(Object)๊ฐ€ ๋‘ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅด๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋”๋ผ๋„, ๋‘ ๊ฐ์ฒด์˜ hashCode๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ํ•„์š”๋Š” ์—†๋‹ค. ๋‹จ, ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง„๋‹ค.
 
hashCode ์žฌ์ •์˜๋ฅผ ์ž˜๋ชปํ–ˆ์„ ๋•Œ ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์กฐํ•ญ์€ ๋‘ ๋ฒˆ์งธ ์กฐํ•ญ. ์ฆ‰, ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€ ๊ฐ์ฒด๋Š” ๊ฐ™์€ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ.
Map<PhoneNumber, String> m = new HashMap<>(); m.put(new PhoneNumber(707, 867, 5309), "์ œ๋‹ˆ"); //์ดํ›„ m.get(new PhoneNumber(707, 867, 5309) ์‹คํ–‰ํ•˜๋ฉด ์ œ๋‹ˆ๊ฐ€ ๋‚˜์™€์•ผ ํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ ์‹ค์ œ๋กœ // null ๋ฐ˜ํ™˜ํ•จ
  • ๋…ผ๋ฆฌ์ ์œผ๋กœ๋Š” ๋™์น˜์ธ ๋‘ ๊ฐ์ฒด๊ฐ€ hashCode๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š์•˜๊ธฐ์— ์„œ๋กœ ๋‹ค๋ฅธ ํ•ด์‰ฌ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์„œ ๋‘๋ฒˆ์งธ ๊ทœ์•ฝ์„ ์ง€ํ‚ค์ง€ ๋ชปํ•˜๊ฒŒ ๋œ ๊ฒƒ์ž„

hashCode ์ƒ์„ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ฆฌ.. ๋Š” ๋‚˜์ค‘์— ์ฐธ๊ณ ํ•˜๊ธฐ ํ•„์š”ํ• ๋•Œ

๐Ÿ’ก
equals๋ฅผ ์žฌ์ •์˜ํ•  ๋•Œ๋Š” hashCode๋„ ๋ฐ˜๋“œ์‹œ ์žฌ์ •์˜ํ•ด์•ผ ํ•จ. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒƒ. ์žฌ์ •์˜ํ•œ hashCode๋Š” Object์˜ API ๋ฌธ์„œ์— ๊ธฐ์ˆ ๋œ ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ๋”ฐ๋ผ์•ผ ํ•˜๋ฉฐ, ์„œ๋กœ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ผ๋ฉด ๋˜๋„๋ก ํ•ด์‹œ์ฝ”๋“œ๋„ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ. ๊ทธ๋Ÿฌ๋‚˜ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ..