[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item10. equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ.

2023. 1. 26. 09:02ใ†JAVA/Effective JAVA

728x90

 

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

equals ๋ฉ”์„œ๋“œ๋Š” ์žฌ์ •์˜ํ•˜๊ธฐ ์‰ฌ์›Œ๋Š” ๋ณด์ด์ง€๋งŒ ํ•จ์ •์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์ •์˜ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ตœ์„ ์ด๊ธฐ๋Š” ํ•˜๋‹ค. 

์žฌ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ์˜ค์ง ์ž๊ธฐ ์ž์‹ ๊ณผ๋งŒ ๊ฐ™๊ฒŒ ๋œ๋‹ค. 

 

 

 

 

equals๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ƒํ™ฉ 

 

1๏ธโƒฃ ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ณ ์œ ํ•˜๋‹ค. 

: ๊ฐ’์„ ํ‘œํ˜„ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋™์ž‘ํ•˜๋Š” ๊ฐœ์ฒด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹น๋œ๋‹ค. 

Thread๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹น๋˜๋Š”๋ฐ, Object์˜ equals ๋ฉ”์„œ๋“œ๋Š” ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค์— ๋”ฑ ๋งž๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด ๋˜๋Š” enum ํƒ€์ž…์ด๋ฉด equals๋ฅผ ๊ตณ์ด ์žฌ์ •์˜ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.(ํ•„์š”๋„ ์—†์Œ) 

 

 

2๏ธโƒฃ ์ธ์Šคํ„ด์Šค์˜ '๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ(logical equality)' ์„ ๊ฒ€์‚ฌํ•  ์ผ์ด ์—†๋‹ค. 

๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” ๋ฌธ์ž์—ด์ด ์žˆ๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ Pattern์€ equals๋ฅผ ์žฌ์ •์˜ํ•ด์„œ ๋‘ Pattern์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ™์€ ์ •๊ทœํ‘œํ˜„์‹์„ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ใ…ใ…‡๋ฒ•๋„ ์žˆ์ง€๋งŒ ์ด๊ฑด ์ด ๋ฐฉ์‹์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋ฅผ ์„ค๊ณ„์ž๊ฐ€ ํŒ๋‹จํ•ด์„œ ์žฌ์ •์˜๋ฅผ ํ•˜๊ฑฐ๋‚˜ ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ํ•œ๋‹ค. 

 

 

3๏ธโƒฃ ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•œ equals๊ฐ€ ํ•˜์œ„ ํด๋ž˜์Šค์—๋„ ๋”ฑ ๋“ค์–ด๋งž๋Š”๋‹ค. 

๋Œ€๋ถ€๋ถ„์˜ set ๊ตฌํ˜„์ฒด๋Š” AbstractSet์ด ๊ตฌํ˜„ํ•œ equals๋ฅผ ์ƒ์†๋ฐ›์•„ ์“ฐ๊ณ , List ๊ตฌํ˜„์ฒด๋“ค์€ AbstractList๋กœ๋ถ€ํ„ฐ, Map ๊ตฌํ˜„์ฒด๋“ค์€ AbstractMap ์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์•„์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

4๏ธโƒฃ ํด๋ž˜์Šค๊ฐ€ private์ด๊ฑฐ๋‚˜ package-private ์ด๊ณ  equals ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ผ์ด ์—†๋‹ค. 

 

 

โญ ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ๊ตณ์ด equals๋ฅผ ์žฌ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค!! 

equals๋Š” ์žฌ์ •์˜ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ตœ์„ ์ด๋‹ˆ๊นŒ ์ž˜ ํŒŒ์•…ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ~_~ 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90