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
'공부 > 이펙티브자바' 카테고리의 다른 글
[이펙티브자바]item12.toString을 항상 재정의하라. (0) | 2023.01.17 |
---|---|
[이펙티브자바]item11.equals를 재정의하려거든 hashCode도 재정의하라. (0) | 2023.01.17 |
[이펙티브자바]item9.try-finally보다는 try-with-resources를 사용하라. (0) | 2023.01.17 |
[이펙티브자바]item8.finalizer와 cleaner 사용을 피하라. (0) | 2023.01.17 |
[이펙티브자바]item7.다 쓴 객체 참조를 해제하라. (0) | 2023.01.13 |
댓글