hashcode : 객체를 대표하는 정수 값. hashCode() 메서드를 통해 이 값을 얻는다. 객체의 hashcode는 객체를 저장하거나 검색할때 hash table같은 데이터 구조의 키로 사용된다.
equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다.
그렇지 않으면 hashCode 일반 규약을 어기게 되어 오류가 발생할 수 있다.
1. 프로그램 실행 중 동일한 객체에 대해 여러 번 hashCode() 메서드를 호출하면, 객체가 수정되지 않았다면 메서드는 항상 동일한 정수를 반환해야 한다. 이 값은 객체가 수정되지 않는 한 프로그램 재실행 간에도 일관되어야 한다.
2. equals(Object) 메서드가 두 객체를 동등하게 판단한다면, 두 객체의 hashCode() 메서드는 동일한 정수 값을 반환해야 한다.
3. equals(Object) 메서드가 두 객체를 다르게 판단한다 하더라도, 두 객체의 hashCode() 메서드가 서로 다른 정수 값을 반환할 필요는 없다. 그러나, 다른 객체에 대해 다른 해시 코드를 생성하는 것이 해시 테이블의 성능을 향상시킨다.
결론 : equals를 재정의할 때는 hashcode도 반드시 재정의해야 한다.
하지만 AutoValue 프레임워크를 사용하면 equals와 hashCode를 자동으로 만들어주니 hashCode를 직접 재정의하는 방법을 외울 필요는 없는것 같다.
'이펙티브 자바' 카테고리의 다른 글
[이펙티브 자바] 아이템 13. clone 재정의는 주의해서 진행하라 (3) | 2024.03.14 |
---|---|
[이펙티브 자바] 아이템 12. toString을 항상 재정의하라 (0) | 2024.03.12 |
[이펙티브 자바] 아이템 10. equals는 일반 규약을 지켜 재정의하라 (0) | 2024.03.12 |
[이펙티브 자바] 아이템 9. try-finally보다는 try-with-resources를 사용하라 (0) | 2024.03.11 |
[이펙티브 자바] 아이템 8. finalizer와 cleaner 사용을 피하라 (0) | 2024.03.11 |