3-1 Equals์ toString์ ์ฌ์ ์
by JiwonDev# ์ด๋จ ๋ Equals ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํด์ผ ํ ๊น?
์ฌ์ค ์๋์ ๊ฐ์ ์ํฉ์์๋ ๊ตณ์ด ์ฌ์ ์ ํ ํ์๊ฐ ์๋ค.
- ๊ฐ๊ฐ์ ๊ฐ์ฒด๊ฐ ๊ณ ์ ํ๋ค.
โก ๊ฐ(value) ๋์ ๊ณ ์ ํ ํ์ฑ ๊ฐ์ฒด(active entity)๋ฅผ ๋ํ๋ด๋ Thread ๊ฐ์ ํด๋์ค๋ ๋ง์ฐฌ๊ฐ์ง. - ํด๋์ค์ "๋
ผ๋ฆฌ์ ๋์ผ์ฑ(logical equality)"์ ๊ฒ์ฌํด์ผํ ํ์์ฑ์ด ์๋ค.
โก ์ผ๋ก๋ก java.util.Random ํด๋์ค๋ ๋ Random ๊ฐ์ฒด๊ฐ ๊ฐ์ ๋์๋ฅผ ๋ง๋๋์ง Equals๋ก ๊ฒ์ฌํ ์ผ์ด ์๋ค. - ์์ ํด๋์ค์์ ์ฌ์ ์ํ equals๊ฐ ์๋ค๋ฉด ํ์ ํด๋์ค์์ ์ฌ์ฉํ๊ธฐ์๋ ์ ๋นํ๋ค.
- ํด๋์ค๊ฐ package-private๋ก ์ ์ธ๋์ด์๋ค๋ฉด equals ๋ฉ์๋๋ฅผ ํธ์ถํ ์ผ์ด ์๋ค.
๋ค์๊ณผ ๊ฐ์ ๋์๋ ์ฌ์ ์ ํ๋๊ฒ ๋ฐ๋์งํ๋ค.
- ๊ฐ์ฒด ๋์ผ์ฑ(object equality)์ด ์๋ ๋ ผ๋ฆฌ์ ๋์ผ์ฑ, ๋๋ฑ์ฑ(logical equality)์ ๊ฐ๋ ์ ์ง์ํ๋ ํด๋์ค์ผ ๋
- ์์ ํด๋์ค์ equals๊ฐ ํ์ ํด๋์ค์ ํ์๋ฅผ ์ถฉ์กฑํ์ง ๋ชปํ ๋
# ๋ ๊ฐ์ฒด๊ฐ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฐ๋ค๋๊ฑด ๋ฌด์จ ์๋ฏธ์ผ๊น?
- โ๋ฐ์ฌ์ฑ(reflexive): ์ฐธ์กฐ x๊ฐ ์์ ๋, x.equals(x)๋ true๋ฅผ ๋ฐํํ๋ค. ๋ชจ๋ ๊ฐ์ฒด๋ ์๊ธฐ ์์ ๊ณผ ๊ฐ์์ผ ํ๋ค.
- โ๋์นญ์ฑ(symmetric): ์ฐธ์กฐ x์ y๊ฐ ์์ ๋, ๋ ๋น๊ต๋ฌธ x.equals(y)์ y.equals(x)์ ๊ฐ์ ๊ฐ์์ผ ํ๋ค.
- โ์ถ์ด์ฑ(transitive): ์ฐธ์กฐ x, y, z๊ฐ ์์ ๋, x.equals(y)๊ฐ true์ด๊ณ y.equals(z)๊ฐ true์ด๋ฉด x.equals(z)๋ true์ด๋ค.
- โ์ผ๊ด์ฑ(consistent): null ์๋ ์ฐธ์กฐ x์ y๊ฐ ์์ ๋, equals๋ฅผ ํตํด ๋น๊ต๋๋ ์ ๋ณด์ ์๋ฌด ๋ณํ๊ฐ ์๋ค๋ฉด, x.equals(y) ํธ์ถ ๊ฒฐ๊ณผ๋ ํธ์ถ ํ์, ์๊ฐ์ ์๊ด์์ด ํญ์ ๊ฐ์์ผ ํ๋ค. ์ ๋ขฐ์ฑ์ด ์๋ค๋ฉด equal๋ฅผ ์ฌ์ ์ ํ์ง๋ง์,
- โ๋(Null)์ ๋ํ ๋น ๋์น์ฑ(Non-nullity): null ์๋ ์ฐธ์กฐ x์ ๋ํด์, x.equals(null)์ ํญ์ false์ด๋ค.
# ์ฃผ์ํด์ผํ ์
- ๋น์ฐํ๊ฑฐ์ง๋ง equals ๋ฉ์๋์ ์ธ์๋ฅผ Object์ ์ํ์ด ์๋ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ง๋ง๋ผ.
- equals()๋ฅผ ์ฌ์ ์ ํ๋ค๋ฉด ์๋ฐ์ ํด๋์ค ๊ท์ฝ์ ๋ฐ๋ผ ๋ฐ๋์ hashCode()๋ ์ฌ์ ์ํ๋ผ.
โก Collection๋ฑ ๋ง์ ํ๋ ์์ํฌ์์๋ ๊ฐ์ฒด์ ๊ณ ์ ๊ฐ์ธ hashCode๋ฅผ ๋จผ์ ๋น๊ตํ์ฌ ๋น๊ต ์ฑ๋ฅ์ ์ต์ ํ ์ํจ๋ค.
๋ค๋ง ๋ฐ๋์ ๊ฒฝ์ฐ, ์ฆ equals(Object)๊ฐ ๋ค๋ฅด๋ค๊ณ ํด์ ๋ ๊ฐ์ฒด์ hashCode์ ๊ฐ์ด ๊ผญ ๋ค๋ฅผ ํ์๋ ์๋ค.
๊ทธ๋ด์ผ์ ์๊ฒ ์ง๋ง. ์ฑ๋ฅ์ ๋์ธ๋ต์๊ณ hashCode๋ฅผ ๋น๊ตํ ๊ฐ์ฒด์ ํต์ฌํ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ณ ์ ํ ์ซ์๊ฐ์ผ๋ก ๋์ถฉ ๋ง๋ค์๋ค๊ฐ, ํด์ํ ์ด๋ธ ์ฌ์ฉ์ ํด์ ํ์ง์ด ๋๋น ์ ธ ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆด ์ ์๋ค.
# toString์ ํญ์ ์ฌ์ ์ํ๋ผ
toString์ ์๋ฐ ๊ท์ฝ์์๋ "์ฌ๋์ด ์ฝ๊ธฐ ์ฝ๋๋ก ๊ฐ๋ตํ์ง๋ง ์ ์ฉํ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ผํ๋ค"๊ณ ๋ช ์๋์ด์๋ค.
Object์ ๊ธฐ๋ณธ toString์ ๊ฐ์ฒด์ ๊ฒ์ฆ๋ ํ๋ค์ (Jenny=PhoneNumber@163b91)์ ๋ฐํํ๋ค. ๊ฐ๋ฅํ๋ค๋ฉด toString ๋ฉ์๋๋ ๊ฐ์ฒด ๋ด์ ์ค์ํ ์ ๋ณด๋ฅผ ๋ด์ ๋ฐํํ๋๋ก ๋ณ๊ฒฝํ๋๋ก ํ์.
'๐ฑBackend > Effective-Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
5-1 ์ ๋ค๋ฆญ์ ๊ทธ๋ฅ Raw ๋ก ์ฌ์ฉํ์ง ๋ง๋ผ(+ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ์ ๊ฑฐ) (0) | 2021.09.15 |
---|---|
4-1 ์์, ์ธํฐํ์ด์ค, ํด๋์ค์ ๊ถํ ์ต์ํ(+Java9 ๋ชจ๋) (0) | 2021.09.15 |
3-4 Cloneable์ ์ฌ์ฉํ์ง ๋ง๋ผ & Comparable์ ์ฌ์ฉ (0) | 2021.09.15 |
2-2 ๋ค ์ด ๊ฐ์ฒด์ฐธ์กฐ๋ฅผ ํด์ ํ๋ผ. (0) | 2021.09.15 |
2-1 ์์ฑ์๋ฅผ ๋์ ํ๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ (0) | 2021.09.15 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev