← 질문 목록
#69깊이 0

동등한 객체의 해시값도 같아야 하는 이유는?

언어 · 런타임기초자료구조

해시 컬렉션은 hashCode로 버킷을 고른 뒤 equals를 확인한다. 동등한 객체의 해시값이 다르면 다른 버킷을 찾아 같은 키를 놓친다.

  1. 조회 키hashCode

    검색할 버킷을 고른다

  2. 버킷equals

    후보와 논리적 동등성을 비교한다

  3. equals결과

    같은 키인지 결정한다

equals는 반사성, 대칭성, 추이성, 일관성을 지켜야 하며 null에는 거짓이어야 한다. hashCode는 동등하면 같아야 하지만 충돌은 허용된다.

equals가 같다고 본 두 객체에서 다른 hashCode가 나오면 규약이 깨진다. hashCode가 더 적은 필드를 써도 그 조건만 지키면 된다. 특히 키를 Map에 넣은 뒤 해시에 쓰인 필드를 바꾸면 다시 찾지 못할 수 있다.

상속 계층에서 값 동등성을 추가하면 대칭성이 쉽게 깨진다. 값 객체는 불변으로 만들고 두 메서드를 같은 필드에서 함께 생성하는 편이 안전하다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

동등한 객체의 해시값도 같아야 하는 이유는?