이론/Java
동등성 비교를 위해 equals(), hashCode() 를 함께 재정의하는 이유
모달조아
2022. 11. 24. 13:41
일단 동일성과 동등성에 대해서 한번 정리해보자면,
- 동일성
- 객체의 주소값을 비교하여 판별
- 동등성
- 객체의 값을 비교하여 판별
- 두 객체의 주소가 달라서 다른 객체라도 값이 같으면 동등함.
동등성을 지키기 위해서 해야할 것
- equals() 재정의
- 기본 동작은 == (동일성 비교)
- 재정의를 통해 값 비교로도 결과를 반환하게 해야함
- hashCode() 재정의
- 기본 동작으로 인스턴스가 저장된 가상머신의 주소를 반환함
- Collection(HashSet, HashMap, HashTable) 의 경우 hash 를 이용하기에 equals() 만 재정의하면 같은 값이어도 주소가 달라 동등하지 않다고 판단하는 경우가 있을 수 있음.