
hashCode()
๊ฐ์ฒด์ ํด์ ์ฝ๋(hash code)๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
Objectํด๋์ค์ hashCode()๋ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ int๋ก ๋ณํํด์ ๋ฐํํ๋ ๋ฉ์๋์ด๋ค.

Objectํด๋์ค์ hashCode๋ฅผ ํ์ธํด๋ณด๋ฉด native๋ผ๋ ๊ฒ์ด ๋ฌ๋ ค์๊ณ , ๋ฉ์๋์ ๋ด์ฉ ๋ํ ์กด์ฌํ์ง ์๋๋ค.
native๋ OS๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋์ด๋ค. ์ฃผ๋ก C์ธ์ด๋ก ์์ฑ์ด ๋์ด์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ฆ ๋ด์ฉ์ด ์๋๊ฒ์ ์ด๋ฏธ C์ธ์ด๋ก ์์ฑ๋์ด์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ด์ฉ์ด ์๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ equals()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๋ฉด, hashCode()๋ ์ค๋ฒ๋ผ์ด๋ฉํด์ผ ํ๋ค.
equls()์ ๊ฒฐ๊ณผ๊ฐ true์ธ ๋ ๊ฐ์ฒด์ ํด์ ์ฝ๋๋ ๊ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.

์ด๋ ๊ฒ ์ ์ฝ๋์ฒ๋ผ equls๊ฐ ture๋ก ํ์ธ์ด ๋๋ฉด str1๊ณผ str2์ ํด์ ์ฝ๋ ๋ํ ๊ฐ์ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
์ฐธ๊ณ ๋ก System.identityHashCode(Object obj)๋ Objectํด๋์ค์ hashCode()์ ๋์ผํ๋ค.

์ด๋ฆ์์๋ ์ ์ถํ๋ฏ์ด ๊ฐ์ฒด๋ง๋ค ๋ค๋ฅธ ํด์ ์ฝ๋๊ฐ์ ๋ฐํํ๋ ๊ฒ์ด๋ค.
์ฐธ๊ณ ๋ก 32bit JVM์ ์ฃผ์ ๊ฐ์ด intํ์ ์ด๊ณ , 64bit JVM์ ์ฃผ์๊ฐ์ด longํ์ ์ด๋ค.
๊ทธ๋ฌ๋ค ๋ณด๋ ์ด๊ฒ์ ๊ฐ์ง๊ณ ํด์ ์ฝ๋๋ฅผ ๋ง๋ค๊ฒ ๋๋ฉด ์ฃผ์ ๊ฐ์ด ๊ฒน์น ์๋ ์๋ค.
8byte๋ฅผ 4byte๋ก ๋ณ๊ฒฝํ๋ค ๋ณด๋ ์ฃผ์ ๊ฐ์ด ๊ฒน์น๋ ์ํฉ์ด ๋ฐ์ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
toString(), toString()์ ์ค๋ฒ๋ผ์ด๋ฉ
toString() : ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด(String)๋ก ๋ณํํ๊ธฐ ์ํ ๋ฉ์๋


์๋ฅผ ๋ค์ด Card๋ผ๋ ํด๋์ค๊ฐ ์๊ณ Card๋ฅผ toString()์ผ๋ก ์ถ๋ ฅํ๊ฒ ๋๋ฉด,
์ ๊ฒฐ๊ณผ์ ๊ฐ์ ํด๋์ค ์ด๋ฆ@๊ฐ์ฒด ์ฃผ์๊ฐ ์ถ๋ ฅ์ด ๋๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ์ฌ์ฉํ๋ค๋ฉด ๋ณ๋ก ์ ์ฉํ์ง ๋ชปํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ฌ์ฉํด์ผ ํ๋ค.

์ด๋ ๊ฒ toString()์ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ๊ฒ ๋๋ฉด, ๊ฒฐ๊ณผ๊ฐ์ด ์ ์ฉํ๊ฒ ๋ณ๊ฒฝ์ด ๋๋ค.
๋ฐ๋์ ์ด๋ ๊ฒ ํ๋ ๊ฒ์ ์๋์ง๋ง ์ด๋ ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
๊ฐ์ฒด๋ iv์ ์งํฉ์ด๋ผ๊ณ ๋ ๋ณผ ์ ์์ผ๋ฉฐ, iv๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ํธํ๋ค.
Objectํด๋์ค
๋ชจ๋ ํด๋์ค์ ์ต๊ณ ์กฐ์. ์ค์ง 11๊ฐ์ ๋ฉ์๋๋ง์ ๊ฐ์ง๊ณ ์๋ค.

equals(Object obj)
๊ฐ์ฒด ์์ (this)๊ณผ ์ฃผ์ด์ง ๊ฐ์ฒด(obj)๋ฅผ ๋น๊ตํ๋ค. ๊ฐ์ผ๋ฉด true, ๋ค๋ฅด๋ฉด false.
Objectํด๋์ค์ equals()๋ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋น๊ต(์ฐธ์กฐ๋ณ์ ๊ฐ ๋น๊ต)

์ด๋ ๊ฒ equlas๋ ์๊ธฐ ์์ ํ๊ณ ๊ฐ์ฒด๊ฐ ์ฃผ์๊ฐ ๊ฐ์์ผ์ง๋ง true๊ฐ ๋๋ค.

์๋ฅผ ๋ค์ด Value๋ผ๋ ํด๋์ค๊ฐ ์๊ณ , Value๋ value๋ผ๋ iv๋ฅผ ๊ฐ์ง๊ณ ์๋ค.

๊ทธ๋ฆฌ๊ณ v1๊ณผ v2๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ ๊ฐ์ฒด์๊ฒ ๊ฐ์ 10์ด๋ผ๋ ๊ฐ์ ๋ฃ์๋ค.
๊ทธ๋ฆฌ๊ณ equals๋ก ํ์ธ์ ํ๋ฉด false๊ฐ ์ถ๋ ฅ์ด ๋๋ค.
๊ฐ์ง๊ณ ์๋ ๊ฐ๊ณผ๋ ๋ฌด๊ดํ๊ฒ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ false๊ฐ ์ถ๋ ฅ์ด ๋๋ค.

๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ ๋น์ด์๋ ๊ณณ์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ฃผ์์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ์ ์๋ค.
Value ํด๋์ค์์ equals์ hashCode๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ง ์์๊ธฐ ๋๋ฌธ์ ๊ฐ์ false๊ฐ ๋์ค๊ฒ ๋๋ค.

์ด๋ ๊ฒ Value ํด๋์ค์์ equals()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๊ฒ๋๋ฉด, ๊ฐ์ฒด ์ฃผ์๋ฅผ ๋น๊ตํ๋ equals()๊ฐ ์๋,
๊ฐ์ฒด์ value๊ฐ์ ๋น๊ตํ๋ equals()๋ก ์ค๋ฒ๋ผ์ด๋ฉํ์๊ธฐ ๋๋ฌธ์ true๊ฐ ์ถ๋ ฅ์ด ๋๋ค.
equals(Object obj)์ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ธ์คํด์ค ๋ณ์(iv)์ ๊ฐ์ ๋น๊ตํ๋๋ก equals()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ผ ํ๋ค.

Person์ด๋ผ๋ ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ณ equals()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ์์ ๋,

p1๊ณผ p2์ ๋์ผํ id์ธ 8011081111222L์ ๋ถ์ฌํ์๋ค.

๊ทธ๋ผ ์๋ก ๋ค๋ฅธ ๋ ๊ฐ์ฒด์ง๋ง id(iv)๊ฐ ๊ฐ๊ธฐ ๋์ผํ๊ธฐ ๋๋ฌธ์

p1๊ณผ p2์ ์ฃผ์๋ฅผ ๋น๊ตํ๋ฉด ์๋ก ๋ค๋ฅธ ๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ false๊ฐ ์ถ๋ ฅ์ด ๋์ง๋ง,
p1.equals(p2)๋ฅผ ํ๊ฒ ๋๋ฉด iv๊ฐ์ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ true๊ฐ ์ถ๋ ฅ์ด ๋๋ค.