본문 바로가기
반응형

EffectivaJava2

[EffectiveJava] Item11 equals를 제정의하려거든 hashCode도 재정의하라 :) equals를 재정의한 클래스 모두 hashCode도 재정의해야한다 위에 적어놓은 소제목 처럼 hashCode를 재정의하지 않는다면 일반 규약을 어기게 되어 HashMap이나 HashSet같은 Collection에서의 원소로 사용될 때 문제를 일으키게 된다. Object 명세 규약 equals에 사용되는 핵심 필드가 변경되지 않았다면 , 실행되는 동안 hashCode메서드는 몇번을 호출해도 항상 같은 hashCode값을 반환햐야한다. equals가 두 객체를 같다고 판단하였다면 두 객체가 가지고있는 hashCode는 같은 값을 반환해야 한다. equals가 두 객체를 다르다고 했더라도, 두 객체의 hashCode가 서로 다른 값을 반환해야할 필요는 없다. 단, 다른 객체에 대해서는 다른 값을 반환해.. 2020. 12. 21.
[EffectiveJava] Item10 equals는 일반 규약을 지켜 재정의하라 이번 Item10은 equals에 대한 내용에 대한 글이 있습니다 equals 메서드는 재정의하기 쉬워 보이지만 잘못된 구성을 하면 생각하지도 못한 사이드 이펙트때문에 디버깅하는데 문제를 발생시킬 수 있습니다. 문제를 발생시키지 않기 위해서는 애초에 재정의 하지 않는것을 추천드립니다만 언젠가는 구현해야할 내용입니다. 다음 내용은 어떠한 경우에 재정의하지 않아도 되는지 알아보겠습니다. 각인스턴스가 본질적으로 고유하다 인스턴스의 '논리적 동치성'을 검사할 일이 없다 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다 대부분의 set 구현체는 AbstractSet이 구현한 equals를 상속받아 사용하고 List는 AbstractList, Map은 AbstractMap으로부터 상속받아 사용한.. 2020. 12. 16.
반응형