<aside> 💡 *equals 를 재정의한 클래스 모두에서 hashCode 도 재정의해야 한다!*

</aside>

Object 명세에서 hashCode 관련된 규약들

  1. *equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 는 항상 같은 값을 반환해야 한다.*
  2. *equals 가 두 객체를 같다고 판단했다면, 두 객체의 hashCode 는 똑같은 값을 반환해야 한다.*
  3. *equals 가 두 객체를 다르다고 판단했더라도, 두 객체의 hashCode 가 서로 다른 값을 반환할 필요는 없다.*

hashCode 재정의를 잘못했을 때 크게 문제가 되는 조항은 두 번째다.

Map<PhoneNumber, String> m = new HashMap<>();
m.put(new PhoneNumber(707, 867, 5309), "제니");
@Override
public int hashCode() {
		return 42;
}

<aside> 💡 그렇다면, 서로 다른 인스턴스에 다른 해시코드를 반환하는 좋은 hashCode 함수를 작성하는 방법은?

</aside>