item 10 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
- equals ๋ฉ์๋๋ ์ฌ์ ์ํ๊ธฐ ์ฌ์ ๋ณด์ด์ง๋ง ๊ณณ๊ณณ์ ํจ์ ์ด ๋์ฌ๋ฆฌ๊ณ ์์ด์ ์์นซํ๋ฉด ๋์ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๋ค. ๋ฌธ์ ๋ฅผ ํํผํ๋ ๊ฐ์ฅ ์ฌ์ด ๊ธธ์ ์์ ์ฌ์ ์ํ์ง ์๋ ๊ฒ์ด๋ค. ๊ทธ๋ฅ ๋๋ฉด ๊ทธ ํด๋์ค์ ์ธ์คํด์ค๋ ์ค์ง ์๊ธฐ ์์ ๊ณผ๋ง ๊ฐ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์์์ ์ด๊ฑฐํ ์ํฉ ์ค ํ๋์ ํด๋นํ๋ค๋ฉด ์ฌ์ ์ํ์ง ์๋ ๊ฒ์ด ์ต์ ์ด๋ค.
- ๊ฐ ์ธ์คํด์ค๊ฐ ๋ณธ์ง์ ์ผ๋ก ๊ณ ์ ํ๋ค. (ex. Thread)
- ์ธ์คํด์ค์ **โ๋ ผ๋ฆฌ์ ๋์น์ฑ(logical equality)โ**์ ๊ฒ์ฌํ ์ผ์ด ์๋ค.
- ์์ ํด๋์ค์์ ์ฌ์ ์ํ equals๊ฐ ํ์ ํด๋์ค์๋ ๋ฑ ๋ค์ด๋ง๋๋ค.
- ํด๋์ค๊ฐ private์ด๊ฑฐ๋ package-private์ด๊ณ equals ๋ฉ์๋๋ฅผ ํธ์ถํ ์ผ์ด์๋ค.
๊ฐ์ฒด ์๋ณ์ฑ(object identity; ๋ ๊ฐ์ฒด๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ์๊ฐ)์ด ์๋๋ผ ๋ ผ๋ฆฌ์ ๋์น์ฑ์ ํ์ธํด์ผ ํ๋๋ฐ, ์์ ํด๋์ค์ 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๋ค.
- == ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์ ๋ ฅ์ด ์๊ธฐ ์์ ์ ์ฐธ์กฐ์ธ์ง ํ์ธํ๋ค.
- instanceof ์ฐ์ฐ์๋ก ์ ๋ ฅ์ด ์ฌ๋ฐ๋ฅธ ํ์ ์ธ์ง ํ์ธํ๋ค.
- ์ ๋ ฅ์ ์ฌ๋ฐ๋ฅธ ํ์ ์ผ๋ก ํ๋ณํํ๋ค.
-
- ์ ๋ ฅ ๊ฐ์ฒด์ ์๊ธฐ ์์ ์ ๋์๋๋ โํต์ฌโ ํ๋๋ค์ด ๋ชจ๋ ์ผ์นํ๋์ง ํ๋์ฉ ๊ฒ์ฌํ๋ค.
- equals๋ฅผ ์ฌ์ ์ํ ๋ hashCode๋ ๋ฐ๋์ ์ฌ์ ์ํ์!
- ๋๋ฌด ๋ณต์กํ๊ฒ ํด๊ฒฐํ๋ ค ๋ค์ง ๋ง์.
- Object ์ธ์ ํ์ ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ equals ๋ฉ์๋๋ ์ ์ธํ์ง ๋ง์. (ํ์ ์ด Object์ธ ๊ฒฝ์ฐ๋ง euals ์ค๋ฒ๋ผ์ด๋ ๋จ)
๊ผญ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด equals๋ฅผ ์ฌ์ ์ํ์ง ๋ง์.
๋ง์ ๊ฒฝ์ฐ์ Object์ equals๊ฐ ์ฌ๋ฌ๋ถ์ด ์ํ๋ ๋น๊ต๋ฅผ ์ ํํ ์ํํด์ค๋ค.
์ฌ์ ์ํด์ผ ํ ๋๋ ๊ทธ ํด๋์ค์ ํต์ฌ ํ๋ ๋ชจ๋๋ฅผ ๋น ์ง์์ด, ๋ค์ฏ ๊ฐ์ง ๊ท์ฝ์ ํ์คํ ์ง์ผ๊ฐ๋ฉฐ ๋น๊ตํด์ผ ํ๋ค.