이론/Java

동등성 비교를 위해 equals(), hashCode() 를 함께 재정의하는 이유

모달조아 2022. 11. 24. 13:41
일단 동일성과 동등성에 대해서 한번 정리해보자면,
  • 동일성
    • 객체의 주소값을 비교하여 판별
 
  • 동등성
    • 객체의 값을 비교하여 판별
    • 두 객체의 주소가 달라서 다른 객체라도 값이 같으면 동등함.

 

동등성을 지키기 위해서 해야할 것

  • equals() 재정의
    • 기본 동작은 == (동일성 비교)
    • 재정의를 통해 값 비교로도 결과를 반환하게 해야함
  • hashCode() 재정의
    • 기본 동작으로 인스턴스가 저장된 가상머신의 주소를 반환함
    • Collection(HashSet, HashMap, HashTable) 의 경우 hash 를 이용하기에 equals() 만 재정의하면 같은 값이어도 주소가 달라 동등하지 않다고 판단하는 경우가 있을 수 있음.