본문 바로가기
개발/Java

[Java] equals 메서드

by Allonsy 2021. 6. 15.
반응형

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

반응형

댓글