목록equals (3)
초보개발자 긍.응.성
equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으키게 된다. hashCode 재정의의 필요성 아래의 내용은 Object 명세 규약에 포함된 내용이다. equals 비교에 사용되는 정보가 변형되지 않았다면, 애플리케이션이 실행되는 동안 객체의 hashCode 메서드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 한다. 단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없다. equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 똑같은 값을 반환해야 한다. equals(Object..
앞서 살펴본 equals 일반 규약들과 이를 위배하는 상황에 대해 알아보자 (이펙티브 자바 3) 10. equals는 일반 규약을 지켜 재정의하라 (1) equals 메서드는 재정의하기에 쉬워 보이지만 곳곳에 함정이 도사리고 있다. 우선적으로 equals 메서드를 재정의하지 않아도 될 경우를 살펴보고, 재정의가 필요하다면 어떤 규약을 지켜서 재정의� ckddn9496.tistory.com 반사성 (reflexivity) 반사성은 객체는 자기 자신과 같아야 한다는 규약이다. 이 규약을 위반하는 경우는 없을 것이다. 대칭성 (symmetry) 대칭성은 두 객체는 서로에 대한 동치 여부에 똑같이 답해야 한다는 규약이다. 부모 클래스 A와 A를 상속하는 B가 존재하고 각각 equals를 구현했다고 가정해보자. ..
equals 메서드는 재정의하기에 쉬워 보이지만 곳곳에 함정이 도사리고 있다. 우선적으로 equals 메서드를 재정의하지 않아도 될 경우를 살펴보고, 재정의가 필요하다면 어떤 규약을 지켜서 재정의해야 하는지 알아보자. equals 메서드를 재정의 할 필요가 없을 때 다음 열거한 상황 중 하나에 해당된다면 equals 메서드를 재정의하지 않는것이 좋다. 각 인스턴스가 본질적으로 고유하다. 값을 표현하는것이 나닌 동작하는 개채를 표현하는 클래스가 여기에 해당된다. 예시로 Thread와 같은 클래스가 여기 해당된다. Object의 equals 메서드는 이미 이러한 클래스에 딱 맞게 구현되어있다. 인스턴스의 논리적 동치성(logical equality)을 검사할 일이 없다. 인스턴스의 논리적인 동치성을 검사해야..