260102 의 TIL _ equals 와 hashCode 재정의

호두·2026년 1월 3일

✔️ Java / Spring

목록 보기
15/25

✅ equals 와 hashCode 구현

내가 직접 만든 클래스를 해시자료구조에 저장할 때는 반드시 equals와 hashCode를 오버라이딩을 직접 해두어야 한다.

  1. equals 와 hashCode 둘 다 재정의 하지 않은 경우

➡️ id = "A" 같은 값이 중복되서 들어갔다. (중복 확인을 ❌)
➡️ 서로 다른 해시인덱스로 저장됐다.
➡️ 검색 시 확인하는 equals가 참조값으로 == 확인해 검색 실패


  1. hashCode 만 재정의한 경우

➡️ id = "A" 같은 값이 중복되서 들어갔다. (중복 확인을 ❌)
➡️ hashCode가 같아서 같은 해시인덱스에 저장됐다.
➡️ 검색 시 확인하는 equals가 참조값으로 == 확인해 검색 실패


  1. 둘다 재정의 한 경우

➡️ 중복된 id 체크 ⭕️
➡️ 같은 65 해시코드
➡️ 검색 성공

📌 해시인덱스에 하나의 값만 저장되어있더라도 equals를 사용해야한다. 같은 해시코드를 가지는 다른 값을 검색할 경우에 같은 값인지 확인을 해야하기 때문이다.

equals 사용처

값을 검색할 때 먼저 해시코드로 만들어낸 해시인덱스를 이용해 해당하는 배열을 찾아간다. 그리고 그 안의 값이 검색한 값과 같은지 equals로 비교한다.

그래서 해시자료구조를 사용할 때, 반드시 둘 다 재정의가 돼있어야 한다‼️

정리

반드시 항상 equals 와 hashCode를 재정의 해두어야 하는 건 아니다. 해시자료구조를 사용하려 할 때! 재정의 하면 된다. (반드시)

0개의 댓글