본문 바로가기
개발/JAVA

[effective java 3/E] equals는 일반 규약을 지켜 재정의하라.

by 상용최 2020. 7. 5.
반응형

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

반응형

댓글