본문 바로가기
공부/이펙티브자바

[이펙티브자바]item10.equals는 일반 규약을 지켜 재정의하라.

by 띵커베르 2023. 1. 17.
728x90
  • 아래와 같은 상황에서는 equals 를 재정의하지 않는게 최선이다.
    • 각 인스턴스가 본질적으로 고유하다.
      • 싱글톤 오브젝트같은 경우에 equals 가 필요할까?enum 일때는?? 굳이 필요없다.
    • 논리적 동치성을 검사할 일이 없다
      • 객체의 동일성이 논리적으로 일치할 경우 굳이 equals 를 재정의 하지 않아도 된다.ex) 문자열 같은
    • 상위클래스에서 재정의한 equals 가 하위 클래스에서도 딱 들어 맞는다
      • set, list 같은 상속하여 만들때 
    • 클래스가 private 이거나 package-private 이고 equals 를 호출할 일이 없다.
      • public 은 equals 를 호출하지 않는다라는걸 보장하지못하지만 private 는 다르다.
  • 각 인스턴스가 본질적으로 고유하다.
  • equlas 를 재정의 안하는걸 추천하지만 하게 된다면 몇가지 지켜야할 사항이 있다.
  • equals 메서드는 동치관계를 구현하며, 다음을을 만족한다.
    • 반사성, 대칭성, 추이성, 일관성, null-아님
    • 해당 내용은 equals 를 재정의할때 다시 보도록 한다.
    • 번사성(거울에 비친 내 모습처럼..) x.equals(x) == true
    • 대칭성 x.equals(y) == y.equals(x) 둘의 비교 결과가 같아야 한다.
    • 추이성 x.equals(y) && y.equals(z) && a.equals(z)
    • 일관성 x.equals(y) == x.equals(y)
    • null-아님 x.equals(null) == false
728x90

댓글