toString() 메서드 재정의 Object의 기본 toString 메서드는 PhoneNumber@adbbd처럼 단순히 클래스이름@16진수로 표시한 해시코드를 반환한다. 해당 인스턴스의 유익한 정보를 반환하기 위해서 toString 메서드는 재정의해야한다. 실전에서 toString은 그 객체가 가진 주요 정보 모두를 반환하는게 좋다. 따라서 toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공해야한다. PhoneNumber.java public final class PhoneNumber { private final short areaCode, prefix, lineNum; public PhoneNumber(int areaCode, int prefix, int lineNum) { t..
equals()와 hashCode() equals를 재정의한 클래스 모두에서 hashCode도 재정의해야한다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어, 해당 클래스의 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으킬 것이다. ▶ Object 명세에서 발췌한 규약 equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메서드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 한다. equals가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 똑같은 값을 반환해야 한다. equals가 두 객체를 다르다고 판단 했더라도 두 객체의 hashCode가 서로 다른 값을 반환할 필요는 없다...