[이펙티브 자바] 아이템 11 - equals를 재정의하려거든 hashCode도 재정의하라

enjoy89·2024년 10월 22일
1

equlas와 hashCode의 관계

  • 동치성: 두 객체가 논리적으로 같다고 판단되면(equalstrue를 반환해야 함), 이들 객체는 같은 해시코드도 반환해야 한다.
  • 컬렉션에서의 사용: HashMap, HashSet 같은 해시 기반 컬렉션에서는 객체의 해시코드를 사용하여 내부적으로 데이터를 저장하고 검색한다. 이 때문에 equalshashCode가 일관되게 구현되어야 한다.

hashCode 메서드는 다음과 같은 규약을 지켜야 한다.

  • 같은 객체는 같은 해시코드: x.equals(y)true일 경우, x.hashCode()y.hashCode()도 같아야 한다.
    • 이 규약을 지키지 않으면, 두 객체가 논리적으로 동일하다고 판단되지만 서로 다른 해시코드를 반환하게 되어 해시 기반 컬렉션에서 올바르게 작동하지 않을 수 있다.
  • 다른 객체는 다른 해시코드: 두 객체가 다르다고 해서 항상 다른 해시코드를 반환해야 하는 것은 아니지만, 가능한 한 서로 다른 해시코드를 반환하는 것이 좋다. 해시 충돌이 발생하면 성능이 저하될 수 있음
profile
Backend Developer 💻 😺
post-custom-banner

0개의 댓글