๋ชจ๋ ํด๋์ค์ ๋ถ๋ชจ ํด๋์ค. ์ฆ, ์ต๊ณ ์กฐ์ ํด๋์ค
์ด๋ ํ ํ๋ ๊ฐ๋ ๊ฐ์ง์ง ์์ผ๋ฉฐ, ๋ชจ๋ ๊ฐ์ฒด๊ฐ ํํ ์ ์๋ ํ๋๋ค์ ์ ์ํ ๋ฉ์๋๋ค๋ง์ ๊ฐ๋๋ค.
- ๊ฐ์ฒด ์์ (this)๊ณผ ์ฃผ์ด์ง ๊ฐ์ฒด(obj)๋ฅผ ๋น๊ตํด์ ๊ฐ์ผ๋ฉด true, ๋ค๋ฅด๋ฉด false ๋ฐํ
- Object ํด๋์ค์ ํฌํจ๋๋ฉฐ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋น๊ต
-
๊ฐ์ฒด์
ํด์์ฝ๋๋ฅผ ๋ฐํํ๋ ๋ฉ์๋ -
Object ํด๋์ค์ ํฌํจ๋๋ฉฐ
๊ฐ์ฒด์ ์ฃผ์๋ฅผ int๋ก ๋ณํํด์ ๋ฐํ -
equals๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๋ฉด hashCode๋ ์ค๋ฒ๋ผ์ด๋ฉํด์ผ ํจ
โญ equals์ ๊ฒฐ๊ณผ๊ฐ true์ธ ๋ ๊ฐ์ฒด์ ํด์์ฝ๋๋ ๊ฐ์์ผ ํ๊ธฐ ๋๋ฌธ
-
๋ง์ฝ ํน์ ํด๋์ค์์ ์ธ์คํด์ค๋ค์ด ํ๋๊ฐ์ด ์ผ์นํ ๊ฒฝ์ฐ ๋์ผํ ๊ฐ์ฒด๋ก ๊ฐ์ฃผํ๋ ค๊ณ ํ๋ค๋ฉด equals์ hashCode ๋ฉ์๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ฒ๋ผ์ด๋ฉํ๋ฉด ๋๋ค.
class Product { String name; int price; @Overriding // ์ค๋ฒ๋ผ์ด๋ฉ์ด๊ธฐ ๋๋ฌธ์ parameter type์ ๋ณ๊ฒฝ ๋ถ๊ฐ public boolean equals(Object obj) { // ๋ณ๋๋ก ํ์ ์ฒดํฌ ์์ธ์ฒ๋ฆฌ ํด์ผ ํจ if (!(obj instanceof Product)) return false; Product other = (Product) obj; return this.name.equals(obj.name) && this.price == obj.price; } @Overriding // equals๊ฐ ๋์ผ ํ๋์์ true์ด๋ฏ๋ก // hashCode๋ ํ๋๊ฐ ๊ฐ์ผ๋ฉด ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก ์ค๋ฒ๋ผ์ด๋ฉ public int hashCode() { return Objects.hash(name, price); } }
- ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ๋ฐํ
ํด๋์ค๋ช @16์ง์์ฃผ์๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง (Object์ toString)- stdout์ผ๋ก ์ถ๋ ฅ ์ ํธ์ถ๋จ
- ํด๋น ๊ฐ์ฒด์ ํด๋์ค ํ์ ์ ๋ฐํํ๋ค.
- ํด๋น ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
- Object์ ์ ์๋ clone ๋ฉ์๋๋ ๋จ์ํ ๊ธฐ๋ณธํ ์๋ฃํ์ ํ๋ ๊ฐ๋ง์ ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์, ์ฐธ์กฐํ ํ๋๋ฅผ ํฌํจํ๋ ํด๋์ค์์ clone ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์ ํ๋ค๋ฉด clone ๋ฉ์๋๋ฅผ ์ฌ์ ์(Overriding)ํด์ผ ํ๋ค.