반응형
equals를 재정의 해야한다면 일반 규약을 지키면서 재정의하자!!
equals를 재정의 하지않아도 될 때
아래의 상황 중 하나에 해당한다면 재정의 하지않아도 된다.
- 각 인스턴스가 본질적으로 고유할 때
- 논리적 동치성을 검사할일이 없을 때
- 상위 Class의 equals를 사용해도 문제 없을 때
- Class가 private이거나 package-private이고 equals를 사용할일이 없을 때
equals를 재정의 해야할 때
논리적 동치성을 확인 해야하는데 상위 Class의 equals가 논리적 동치성을 비교하도록 재정의 되지 않았을 때 재정의 해야한다.
equals를 재정의 할 때 지켜야 할 일반 규약
아래의 사항들을 지켜서 재정의 해야한다.
- 반사성 : null이 아닌 모든 참조 값 x에 대해, x.equals(x)는 true
- 대칭성 : null이 아닌 모든 참조 값 x,y에 대해, x.equals(y) true 면 y.equals(x)도 true
- 추이성 : null이 아닌 모든 참조 값 x,y,z에 대해 x.equals(y) true y.equals(z) true이면 x.equals(z) 또한 true
- 일관성 : null이 아닌 모든 참조 값 x,y에 대해 x.equals(y)를 반복해서 호출하면 일관된 값을 return
- not-null : null이 아닌 모든 참조 값 x에 대해, x.equals(null)은 false이다.
자세한 사항이나 예제를 확인하고 싶으신분들은 effective java 3/E의 아이템10을 참조하시길 바랍니다.
출처 : effective java 3/E
반응형
'개발 > JAVA' 카테고리의 다른 글
[effective java 3/E] 추상 클래스보다는 인터페이스를 우선하라. (0) | 2020.07.08 |
---|---|
[effective java 3/E] 상속보다는 컴포지션을 사용하라 (0) | 2020.07.05 |
[effective java 3/E] 자원을 직접 명시하지말고 의존 객체 주입을 사용하라 (2) | 2020.06.28 |
[effective java 3/E] private 생성자나 열거타입으로 싱글턴임을 보증하라 (0) | 2020.06.26 |
[effective java 3/E] 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2020.06.21 |
댓글