카테고리 없음
hashCode, equals
dani717
2024. 3. 21. 15:52
해시코드 : 객체 식별 고유한 정수값
주소값이 다르면 해시코드 값도 다르다 (string 제외)
HashSet, HashMap, HashTable은 해시코드가 다른 값이라면 동등성 비교(equals)를 시도조차 하지 않도록 최적화되어있습니다.
그렇기 때문에, 동등성 비교를 위해 hashCode() 메서드의 재정의 필요성을 느낄 수 있습니다.
hashCode() 메서드와 equals() 메서드 관계
Object 명세 규약을 보면 다음과 같은 말이 있습니다.
- equals 비교에서 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode메서드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 한다. 단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없다.
- equals(Object)가 두 객체가 같다고 판단했다면, hashCode는 똑같은 값을 반환해야 한다.
위 명세 규약 중 2번째 규약을 보면 equals() 메서드로 두 객체가 같다고 판단되면, 해시코드는 똑같은 값을 반환해야 한다는 말이 있습니다.
만약 equals()만 재정의한 후, hashCode() 메서드를 재정의 하지 않으면 동치 관계인 두 객체가 서로 다른 해시코드를 반환하게 됨으로 2번째 규약을 어기게 됩니다.
euqals()를 재정의할 때, hashCode() 또한 재정의 해줍시다.
https://roomenergy.tistory.com/25
hashCode()와 equals()
해시코드(hashCode) 해시코드란? 자바에서 동일한 이름의 객체가 여러 개 생성될 수 있는데, 이 객체들은 이름만 같을 뿐 서로 다른 상태를 가진 객체들입니다. 이 객체들을 구분하기 위해 고유한
roomenergy.tistory.com