이펙티브 자바 아이템11, 12 정리

이창호·2022년 5월 10일
0

이펙티브자바

목록 보기
12/12

equals를 재정의하려거든 hashcode도 재정의하라

equals를 재정의한 클래스는 hashcode도 재정의해야 한다.

  • 물리적적(주소)으로 다른 두 객체가 equals를 통해 논리적으로 같다 하면 hashcodce도 같다야 한다.
  • 그렇지 않으면 HashMap이나 HashSet 같은 컬렉션의 원소로 사용 할 때, 논리적으로 같음에도 불구하고 새로운 키를 생성 할 것이다.
  • 논리적으로 동치인 객체는 같은 해시 버켓에 담겨진다. 하지만, 그렇다고 hashcode를 모두 같은 값을 반환하도록 하면 같은 버킷에 너무 많은 객체가 담겨져서 평균 수행시간이 O(1)인 해시테이블이 O(n)으로 느려진다.

toString을 항상 재정의하라

toString은 재정의하지 않으면 이렇게 출력된다.

  • 클래스명@16진수해시코드를 반환한다.
  • 직접 호출 하지 않아도 디버거나 다른 어딘가에서 호출해서 출력될 것이다.
  • 재정의해서 알아보기 쉽게 한 객체와 그렇지 않은 객체 중 어느 것이 디버깅할 때 더 편할까?
  • toString을 재정의하는 것이 더 편하다.

toString은 이렇게 하는게 좋다.

  • 그 객체가 가진 주요 정보를 모두 반환하기
  • 포맷을 명시하든 아니든 의도는 명확히 밝혀야 한다.
  • toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자.
profile
이타적인 기회주의자

0개의 댓글