1. 객체 비교의 일관성
equals()가 true를 반환하는 두 객체는 반드시 같은 hashCode 값을 반환해야 한다.
만약, equals()가 true를 반환하는 데 hashCode 값이 다르다면, 예상치 못한 결과가 발생할 수 있다.
대표적인 예로, 해시값을 사용하는 HashSet, HashMap에서 문제가 발생할 수 있다.
2. equals()와 hashCode()의 동작 순서
2 - 1. HashMap 에서 데이터가 추가될 때
- 추가되는 데이터의 hashCode()의 반환 값이 HashMap에 존재하는지 비교한다.
- 같은 값이 있다면, equals()를 통해 true가 나오는지 비교한다.
- true이면 동등한 객체로 판단한다.
따라서, equals() true가 나오는 동등한 객체라고 하더라도 hashCode()에서 다른 값이 나와버리면,
HashMap에서 다른 값으로 간주를 해버린다는 것이다.
3. 결론
equals()를 재정의할 때는 반드시 hashCode()도 함께 재정의하여
객체의 동등성 비교와 해시 기반 컬렉션에서의 올바른 동작을 보장해야 한다.
References
https://www.maeil-mail.kr/question/70
https://velog.io/@zvyg1023/equals%EC%99%80-hashCode-%ED%95%A8%EC%88%98-r6oed3so
'백엔드 면접 질문' 카테고리의 다른 글
동일성과 동등성에 대해서 설명해주세요. (0) | 2024.12.17 |
---|---|
JPA에서 ID 생성 전략에 대해서 설명해주세요. (1) | 2024.12.07 |
얕은 복사와 깊은 복사에 대해서 설명해주세요. (0) | 2024.12.04 |
트랜잭션 격리수준은 무엇인가요? (0) | 2024.12.03 |
데이터베이스 인덱스에 대해서 설명해주세요. (0) | 2024.12.02 |