did_story
[Java] hashCode()์์ equals()๋ฅผ ์ฌ์ ์ ํด์ผํ๋ ์ด์ ๋ณธ๋ฌธ
[Java] hashCode()์์ equals()๋ฅผ ์ฌ์ ์ ํด์ผํ๋ ์ด์
์ด์ ์์ 2025. 6. 27. 13:08equals์ hashCode ๋ฉ์๋๋ ๊ฐ์ฒด์ ๋๋ฑ์ฑ ๋น๊ต์ ํด์๊ฐ ์์ฑ์ ์ํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ง๋ง, ํจ๊ป ์ฌ์ ์ํ์ง ์๋๋ค๋ฉด ์์์น ๋ชปํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๊ฐ๋ น, ํด์๊ฐ์ ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ(HashSet, HashMap..)์ ์ฌ์ฉํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
equals()๋?
boolean equals(Object obj)๋ก ์ ์๋ equals() ๋ฉ์๋ == ๋ฅผ ํตํด ๊ฐ์ฑ์ ์ฐธ์กฐ(๋ ํผ๋ฐ์ค) ๋น๊ตํ์ฌ 2๊ฐ์ ๊ฐ์ฒด๊ฐ ๋์ผํ์ง ๊ฒ์ฌํ๊ธฐ ์ํด์ ์ฌ์ฉ๋ฉ๋๋ค. equals๊ฐ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ๊ฒ์ด ๋์ผํ์ง๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ฉฐ, ์ด๋ ๋์ผ์ฑ(Identity)์ ๋น๊ตํ๋ ๊ฒ์ ๋๋ค. ์ฆ 2๊ฐ์ ๊ฐ์ฒด๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์ด ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ธ ๊ฒฝ์ฐ์๋ง ๋์ผํ ๊ฐ์ฒด๊ฐ ๋ฉ๋๋ค. - Identity
๊ทธ๋ฌ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๋ณด๋ฉด ๋์ผํ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฌ๋ฌ๊ฐ๊ฐ ๋์ฐ์ ธ ์๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์ด๋ด ๊ฒฝ์ฐ ๋๋ฑ์ฑ์ ๋ํ ๊ฒ์ฌ๋ ๊ฐ์ด ํ๋ equals() ์ฌ์ฉ๋ฉ๋๋ค! Object.equals ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ๊ฐ์ฒด์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๋๋ก ํ์ต๋๋ค. ์ฆ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด์ด์ง๋ง ๊ฐ๊ฐ์ field๋ฅผ ๋น๊ตํ์ฌ ๋๋ฑ์ฑ ๋น๊ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ ํ ์ ์๋ค. - Equality
@Override
public boolean equals(Object object){
// Identity
if (this == object) {
return true;
}
if (object == null || getClass() != object.getClass()) return false;
// Equality
PrivateObject po = (PrivateObject) object;
return field1.equals(po.field1) && ... ;
}
equals() ๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ ์ด์ ๋?!
Object ํด๋์ค์ equals() ๋ฉ์๋๋ == ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผ์ฑ์ ๋น๊ตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ํด๋์ค๋ Object ํด๋์ค๋ฅผ ์์ํ์ฌ ๋์ผ์ฑ ๋น๊ต๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์, ๋๋ฑ์ฑ ๋น๊ต๊ฐ ํ์ํ ํด๋์ค์์ ํ์์ ๋ง๊ฒ equals & hashCode ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ผ ํฉ๋๋ค.
HashCode๋ฅผ ์ธ ๋ equals()๋ฅผ ๊ฐ์ด ์ค๋ฒ๋ผ์ด๋ฉํ์ง ์์ผ๋ฉด, ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋์?
ํด์๊ฐ์ ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ๋ hashCode ๋ฉ์๋์ ๋ฐํ๊ฐ์ ์ฌ์ฉํ๋๋ฐ์. hashCode ๋ฉ์๋์ ๋ฐํ ๊ฐ์ด ์ผ์นํ ์ดํ equals ๋ฉ์๋์ ๋ฐํ๊ฐ ์ฐธ์ผ ๋๋ง ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฐ์ ๊ฐ์ฒด๋ผ๊ณ ํ๋จํฉ๋๋ค. Object ํด๋์ค์ ๊ธฐ๋ณธ hashCode ๋ฉ์๋๋ ๊ฐ์ฒด์ ๊ณ ์ ํ ์ฃผ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ง๋ค ๋ค๋ฅธ ๊ฐ์ ๋ฐํํฉ๋๋ค. ๋ฐ๋ผ์ 2๊ฐ์ Object ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ํ๋จ๋์๊ณ HashSet์์ ์ค๋ณต ์ฒ๋ฆฌ๊ฐ ๋์ง ์์์ต๋๋ค.
'BackEnd๐ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Java] ๋์ผ์ฑ(Identity)๊ณผ ๋๋ฑ์ฑ(Equality) (2) | 2025.06.27 |
|---|---|
| [Java] ์๋ฐ์์ Checked Exception๊ณผ Uncheck Exception์ ์ฐจ์ด์ . (2) | 2025.06.17 |
| [Java / JDBC] JDBC๊ฐ ๋ฌด์์ผ๊น? (2) | 2025.01.20 |