🎯 모든 예제 소스는에서 확인할 수 있습니다.

🎈배워 볼 내용

✅ Object 메서드들을 언제 어떻게 재정의해야 하는지에 대해 알아본다.

🔥 ITEM 10. equals는 일반 규약을 지켜 재정의하라

equals 메서드는 재정의하기 쉬워 보이지만 곳곳에 함정이 도사리고 있어서 자칫하면 끔찍한 결과를 초래한다.

문제를 회피하는 가장 쉬운 길은 아예 재정의를 하지 않는 것인데, 다음에서 열거한 상황에 하나에 해당한다면 재정의하지 않는 것이 최선이다.

  1. 각 인스턴스가 본질적으로 고유하다.
    1. 값을 표현하는 게 아니라 동작하는 개체를 표현하는 클래스 (Thread)
  2. 인스턴스의 논리적 동치성을 검사할 일이 없다.
  3. 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다.
  4. 클래스가 private이거나 package-private이고 equals 메서드를 호출할 일이 없다.

그렇다면 equals를 재정의해야 할 때는 언제일까?

객체 식별성이 아니라 논리적 동치성을 확인해야 하는데, 상위 클래스의 equals가 논리적 동치성을 비교하도록 재정의되지 않았을 때다.

예를 들어 값 클래스들이 여기 해당하는데, Integer나 String 처럼 값을 표현하는 클래스를 뜻한다.

두 값 객체를 equals로 비교하는 프로그래머는 객체가 같은지가 아니라 값이 같은지를 알고 싶어 할 것이다.