override
-
[Effective Java] 아이템11: equals를 재정의하려거든 hashCode도 재정의하라Language/Java 2022. 6. 5. 00:11
equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet 과 같은 컬렉션의 원소로 사용할 때 문제를 일으킬 것이다. ✔️ hashCode 에 관한 규약 다음은 Object 명세에서 발췌한 규약이다. equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메서드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 한다. 단 애플리케이션을 다시 실행한다면 이 값은 달라져도 상관없다. equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 똑같은 값을 반환해야 한다. equals(Object)..
-
[Effective Java] 아이템10: equals는 일반 규약을 지켜 재정의하라Language/Java 2022. 6. 4. 16:53
equals 메서드는 재정의하기 쉬워 보이지만 곳곳에 함정이 도사리고 있다. 따라서 재정의가 필요하지 않은 경우에는 재정의하지 않는 것이 최선의 선택이다. ✔️ equals를 재정의하지 않는 것이 좋은 상황 1️⃣ 각 인스턴스가 본질적으로 고유한 경우 값을 표현하는 게 아니라 동작하는 개체를 표현하는 클래스. Thread 와 같은 클래스가 좋은 예시다. 2️⃣ 인스턴스의 '논리적 동치성'을 검사할 일이 없는 경우 3️⃣ 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는 경우 4️⃣ 클래스가 private 이거나 package-private 이고, equals 메서드를 호출할 일이 없는 경우 참고❗️ equals가 실수로라도 호출되는 걸 막고 싶다면 다음처럼 구현하자. @Override ..