2023. 1. 26. 09:02ใJAVA/Effective JAVA
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๋ ์ฌ์ ์ ํ์ง ์๋ ๊ฒ์ด ์ต์ ์ด๋๊น ์ ํ์ ํด์ ์ฌ์ฉํ๊ธฐ ~_~