반응형
equals 메서드 재정의에는 함정이 많다!
아래 상황 중 하나에 해당한다면 재정의 하지 않는 것이 최선
- 각 인스턴스가 본질적으로 고유하다
- 인스턴스의 논리적 동치성을 검사할 일이 없다
- 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다
- 클래스가 private이거나 package-private이고 equals 메서드를 호출할 일이 없다
equals 메서드는 동치 관계를 구현하며, 다음을 만족한다
- 반사성(reflexivity) - null이 아닌 모든 참조 값 x에 대해 x.equals(x) 는 true
- 대칭성(symmetry) - null이 아닌 모든 참조 값 x,y에 대해 x.equals(y)가 true 면 y.equals(x) 도 true
- 추이성(transitivity) - null이 아닌 모든 참조 값 x,y,z에 대해 x.equals(y)가 true이고 y.equals(z)도 true면 x.equals(z)도 true
- 일관성(consistency) - null이 아닌 모든 참조 값 x,y에 대해 x.equals(y)를 반복해서 호출하면 항상 true 또는 항상 false
- null 아님 - null이 아닌 모든 참조 값 x에 대해 x.equals(null)은 false
출처 : Effective Java 3/E
반응형
'개발 > Java' 카테고리의 다른 글
[Java] LocalDate, ChronoUnit으로 날짜 간격 구하기(31일 간격으로 나누기) (0) | 2022.01.17 |
---|---|
[Java] 체크예외, 언체크예외 초간단 정리 (0) | 2022.01.11 |
[이펙티브 자바] 정적 팩터리 메서드 명명 방식 (0) | 2021.04.27 |
[Lombok + Builder pattern + generic] 롬복 빌더패턴에서 generic 사용하기 (0) | 2021.04.19 |
[Springboot] 스프링 스케줄러 설정 / 1분 주기 / 5분 주기 / 매일 자정 / 환경 변수 이용 / 예제 (0) | 2021.01.11 |
댓글