item 10 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

์•„์ดํ…œ10 equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ

  • equals ๋ฉ”์„œ๋“œ๋Š” ์žฌ์ •์˜ํ•˜๊ธฐ ์‰ฌ์›Œ ๋ณด์ด์ง€๋งŒ ๊ณณ๊ณณ์— ํ•จ์ •์ด ๋„์‚ฌ๋ฆฌ๊ณ  ์žˆ์–ด์„œ ์ž์นซํ•˜๋ฉด ๋”์ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•œ๋‹ค. ๋ฌธ์ œ๋ฅผ ํšŒํ”ผํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๊ธธ์€ ์•„์˜ˆ ์žฌ์ •์˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ƒฅ ๋‘๋ฉด ๊ทธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ์˜ค์ง ์ž๊ธฐ ์ž์‹ ๊ณผ๋งŒ ๊ฐ™๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ๋‹ค์Œ์—์„œ ์—ด๊ฑฐํ•œ ์ƒํ™ฉ ์ค‘ ํ•˜๋‚˜์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด ์žฌ์ •์˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ตœ์„ ์ด๋‹ค.

์žฌ์ •์˜ ํ•˜์ง€ ๋ง์•ผ์•„ ํ•˜๋Š” ๊ฒฝ์šฐ

  1. ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ณ ์œ ํ•˜๋‹ค. (ex. Thread)
  2. ์ธ์Šคํ„ด์Šค์˜ **โ€˜๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ(logical equality)โ€™**์„ ๊ฒ€์‚ฌํ•  ์ผ์ด ์—†๋‹ค.
  3. ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•œ equals๊ฐ€ ํ•˜์œ„ ํด๋ž˜์Šค์—๋„ ๋”ฑ ๋“ค์–ด๋งž๋Š”๋‹ค.
  4. ํด๋ž˜์Šค๊ฐ€ private์ด๊ฑฐ๋‚˜ package-private์ด๊ณ  equals ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ผ์ด์—†๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์–ธ์ œ ์ •์˜ํ•ด์•ผ ํ• ๊นŒ?

๊ฐ์ฒด ์‹๋ณ„์„ฑ(object identity; ๋‘ ๊ฐ์ฒด๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€๊ฐ€)์ด ์•„๋‹ˆ๋ผ ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ์„ ํ™•์ธํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ƒ์œ„ ํด๋ž˜์Šค์˜ equals๊ฐ€ ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ์„ ๋น„๊ตํ•˜๋„๋ก ์žฌ์ •์˜๋˜์ง€ ์•Š์•˜์„ ๋•Œ๋‹ค.

equals ๊ฐ€ ์ง€์ผœ์•ผํ•  ์„ฑ์งˆ

๋ฐ˜์‚ฌ์„ฑ(reflexivity): null์ด ์•„๋‹Œ ๋ชจ๋“  ์ฐธ์กฐ ๊ฐ’ x์— ๋Œ€ํ•ด, x.equals(x)๋Š” true๋‹ค.
๋Œ€์นญ์„ฑ(symmetry): null์ด ์•„๋‹Œ ๋ชจ๋“  ์ฐธ์กฐ ๊ฐ’ x, y์— ๋Œ€ํ•ด, x.equals(y)๊ฐ€ true๋ฉด y.equals(x)๋„ true๋‹ค.
์ถ”์ด์„ฑ(transitivity): null์ด ์•„๋‹Œ ๋ชจ๋“  ์ฐธ์กฐ ๊ฐ’ x, y, z์— ๋Œ€ํ•ด, x.equals(y)๊ฐ€ true์ด๊ณ  y.equals(z)๋„ true๋ฉด x.equals(z)๋„ true๋‹ค.
์ผ๊ด€์„ฑ(consistency): null์ด ์•„๋‹Œ ๋ชจ๋“  ์ฐธ์กฐ ๊ฐ’ x, y์— ๋Œ€ํ•ด, x.equals(y)๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ํ˜ธ์ถœํ•˜๋ฉด ํ•ญ์ƒ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ํ•ญ์ƒ false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
null-์•„๋‹˜: null์ด ์•„๋‹Œ ๋ชจ๋“  ์ฐธ์กฐ ๊ฐ’ x์— ๋Œ€ํ•ด, x.equals(null)์€ false๋‹ค.

๋‹จ๊ณ„์ ์ธ equals ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

  1. == ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ์ด ์ž๊ธฐ ์ž์‹ ์˜ ์ฐธ์กฐ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  2. instanceof ์—ฐ์‚ฐ์ž๋กœ ์ž…๋ ฅ์ด ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ž…์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  3. ์ž…๋ ฅ์„ ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜ํ•œ๋‹ค.
    1. ์ž…๋ ฅ ๊ฐ์ฒด์™€ ์ž๊ธฐ ์ž์‹ ์˜ ๋Œ€์‘๋˜๋Š” โ€˜ํ•ต์‹ฌโ€™ ํ•„๋“œ๋“ค์ด ๋ชจ๋‘ ์ผ์น˜ํ•˜๋Š”์ง€ ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌํ•œ๋‹ค.

๊ตฌํ˜„ ์‹œ ํŒ

  • equals๋ฅผ ์žฌ์ •์˜ํ•  ๋• hashCode๋„ ๋ฐ˜๋“œ์‹œ ์žฌ์ •์˜ํ•˜์ž!
  • ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๋ ค ๋“ค์ง€ ๋ง์ž.
  • Object ์™ธ์˜ ํƒ€์ž…์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” equals ๋ฉ”์„œ๋“œ๋Š” ์„ ์–ธํ•˜์ง€ ๋ง์ž. (ํƒ€์ž…์ด Object์ธ ๊ฒฝ์šฐ๋งŒ euals ์˜ค๋ฒ„๋ผ์ด๋“œ ๋จ)

ํ•ต์‹ฌ์ •๋ฆฌ

๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด equals๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ๋ง์ž.
๋งŽ์€ ๊ฒฝ์šฐ์— Object์˜ equals๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์ด ์›ํ•˜๋Š” ๋น„๊ต๋ฅผ ์ •ํ™•ํžˆ ์ˆ˜ํ–‰ํ•ด์ค€๋‹ค.
์žฌ์ •์˜ํ•ด์•ผ ํ•  ๋•Œ๋Š” ๊ทธ ํด๋ž˜์Šค์˜ ํ•ต์‹ฌ ํ•„๋“œ ๋ชจ๋‘๋ฅผ ๋น ์ง์—†์ด, ๋‹ค์„ฏ ๊ฐ€์ง€ ๊ทœ์•ฝ์„ ํ™•์‹คํžˆ ์ง€์ผœ๊ฐ€๋ฉฐ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ