Book/이펙티브 자바
이펙티브 자바, 아이템 12. toString을 항상 재정의하라
이정인
2021. 8. 28. 13:33
이펙티브 자바, 아이템 12. toString을 항상 재정의하라
toString의 일반 규약, 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보, 모든 하위 클래스에서 이 메서드를 재정의하라.
Object의 기본 toString은 클래스이름@16진수해시코드를 반환하며, 그다지 쓸모 없는 메시지를 출력하게 된다.
toString을 잘 구현한 클래스는 사용하기에 훨씬 즐겁고, 그 클래스를 사용한 시스템은 디버깅하기 쉽다.
toString은 우리가 직접 호출하지 않아도 다른 어딘가에서 쓰일 수 있다.
실전에서 toString은 그 객체가 가진 주요 정보를 모두 반환하는 게 좋다.
PhoneNumber에서 지역 번호만 toString에 담았다고 가정한다.
@Override
public String toString() {
return "PhoneNumber{" +
"ariaCode=" + ariaCode +
'}';
}
그러면 아래와 같은 테스트에서 테스트 결과 출력으로 문제를 발견하기 어려워진다.
@Test
public void createPhoneNumber() {
PhoneNumber phoneNumber1 = new PhoneNumber(123,456,7890);
PhoneNumber phoneNumber2 = new PhoneNumber(123,456,7891);
assertThat(phoneNumber1).isEqualTo(phoneNumber2);
// 출력 결과
// Expected :PhoneNumber{ariaCode=123}
// Actual :PhoneNumber{ariaCode=123}
}
예외적으로,
정적 유틸리티 클래스는 toString을 제공할 이유가 없다.
대부분의 열거 타입은 자바가 이미 완벽한 toString을 제공하므로 따로 재정의할 필요가 없다.
그러나 하위 클래스들이 공유할 문자열 표현이 있는 추상클래스는 toString을 재정의해준다.