Item 11. hashCode
equals๋ฅผ ์ฌ์ ์ํ๋ ค๊ฑฐ๋ hashCode๋ ์ฌ์ ์ํ๋ผ
์์ดํ 10์์ equals๋ฅผ ์ฌ์ ์ํ ๋ hashCode๋ ์ฌ์ ์ํด์ผ ํ๋ค๊ณ ์ธ๊ธํ๋ค. Object ๋ช ์ธ์๋ ์๋์ ๊ฐ์ด ์ ์๋์ด ์๋ค.
equals ๋น๊ต์ ์ฌ์ฉ๋๋ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด, hashCode ๋ฐํ ๊ฐ๋ ํญ์ ๊ฐ์์ผ ํจ(์ผ๊ด์ฑ)
equals๊ฐ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ค๊ณ ํ๋จํ๋ฉด, ๋ ๊ฐ์ฒด์ hashCode๋ ๊ฐ์ ๊ฐ์ ๋ฐํํด์ผ ํจ
equals๊ฐ ๋ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅด๋ค๊ณ ํ๋จํด๋, ๋ ๊ฐ์ฒด์ hashCode๊ฐ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๋ฐํํ ํ์๋ ์์(๋จ, ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํด์๋ ๋ค๋ฅธ ๊ฐ์ ๋ฐํํด์ผ ์ฑ๋ฅ์ด ์ข์์ง)
์ฌ์ ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ง ์์ผ๋ฉด HashMap / HashSet ๊ฐ์ Hash ๊ธฐ๋ฐ ์ปฌ๋ ์ ์์ ์ ๋๋ก ๋์ํ์ง ์๊ฒ ๋๋ค.
hashCode ์ฌ์ ์ ๋ฐฉ๋ฒ
์ข์ hashCode๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค. ์ฐ์ ์ฃผ์ํด์ผํ ๋ถ๋ถ์ equals์์ ์ฌ์ฉํ๋ ํ๋๋ค๊ณผ ๋์ผํ ํ๋๋ค์ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
int ๋ณ์ result๋ฅผ ์ ์ธํ ํ ๊ฐ c๋ก ์ด๊ธฐํ
ํด๋น ๊ฐ์ฒด์ ๊ฐ ํต์ฌ ํ๋์ ๋ํด ์๋์ ๊ฐ์ด ์ํํ์ฌ ํด์์ฝ๋ c๋ฅผ ๊ณ์ฐ
๊ธฐ๋ณธ ํ์ : Type.hashCode(f) ์ํ
์ฐธ์กฐ ํ์ : ์ฌ๊ท์ ์ผ๋ก hashCode๋ฅผ ํธ์ถํ๋ฉฐ, ์๋์ ๊ฐ์ ๊ท์น์ผ๋ก ๊ณ์ฐ
null: 0
๋ฐฐ์ด: Arrays.hashCode๋ฅผ ์ฌ์ฉ
ํต์ฌ ํ๋: ํต์ฌ ํ๋์ hashCode๋ฅผ ์ฌ์ฉ
ํ๋๊ฐ ํต์ฌ์ด ์๋๋ฉด, ํด๋น ํ๋์ hashCode๋ฅผ ๊ณ์ฐํ์ง ์์
๊ณ์ฐ๋ ํด์์ฝ๋ c๋ฅผ result์ ๋ํจ(
result = 31 * result + c
)
Objects ํด๋์ค์๋ ์์์ ๊ฐ์๋งํผ ๊ฐ์ฒด๋ฅผ ๋ฐ์ ํด์์ฝ๋๋ฅผ ๊ณ์ฐํด์ฃผ๋ ์ ์ ๋ฉ์๋์ธ hash๊ฐ ์๋ค. ์์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ์ฌ ์ ๊ตฌํ๋์ด ์์ผ๋ฏ๋ก, ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ง๋ง ์๋๊ฐ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ์ค์ํ ์ํฉ์์๋ ์ง์ ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค.
๊ณฑ์
์ 31์ ์ฌ์ฉํ๋ ์ด์
ํ์์ด๋ฉด์ ์์์ด๊ธฐ ๋๋ฌธ์ธ๋ฐ, ์ฌ์ค ์์๋ฅผ ์ฐ๋ ์ด์ ๋ ๋ช ํํ์ง ์๊ณ ์ ํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ์ด๋ผ๊ณ ํ๋ค. ํ์ง๋ง ์ง์๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ฉด ์ ๋ณด๋ฅผ ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ง์ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ง ์๋ค.
์บ์ฑ
์์์๋ ์ธ๊ธํ๋ฏ์ด ํด์์ฝ๋๋ฅผ ๊ณ์ฐํ๋ ๊ณผ์ ์ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์๋ ์์ ์ด๊ธฐ ๋๋ฌธ์ ํ๋์ ๊ฐ์ ์บ์ฑํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ํ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํด์์ฝ๋๋ฅผ ๋ค์ ๊ณ์ฐํด์ผ ํ๋ฏ๋ก, ๋ถ๋ณ ํ๋์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
Last updated
Was this helpful?