[item 12] toString을 항상 재정의하라

searchortype·2022년 2월 13일
0

이펙티브자바

목록 보기
9/9
post-thumbnail

모든 구체 클래스에서 Object의 toString을 재정의하자.

상위 클래스에서 이미 알맞게 재정의한 경우는 예외다.

toString을 재정의한 클래스는 클래스를 사용한 시스템을 디버깅하기 쉽게 해준다.

toString은 해당 객체에 관한 명확하고 유용한 정보를 읽기 좋은 형태로 반환해야한다.


모든 하위 클래스에서 toString을 재정의 하라

Object의 기본 toString 메서드 사용 시 클래스이름@16진수로표시한_해시코드를 반환할 뿐이다.

toString을 잘 구현한 클래스는 사용하기 편하고 그 클래스를 사용한 시스템은 디버깅하기 쉽다.

toString을 자동으로 호출하는 경우

println, printf , 문자열 연결 연산자(+) , assert구문에 넘길 때 , 디버거가 객체를 출력할 때

format

  • toString을 구현할 때면 반환값의 포맷을 문서화할지 정해야 한다. (특히 값클래스)
  • 하지만 포맷을 한번 명시하면 (그 클래스가 많이 쓰인다면)평생 그 포맷에 얽매이게 된다.
  • 포맷을 명시하지 않는다면 향후 릴리즈에서 정보를 더 넣거나 포맷을 개선할 수 있는 유연성을 얻게 된다.
  • 포맷을 명시하든 아니든 의도는 명확히 밝혀야 한다.
  • 포맷 명시 여부와 상관없이 toString이 반환한 값에 포함된 정보를 얻어 올 수 있는 API를 제공하자.

toString을 제공할 이유가 없는 클래스

하위 클래스들이 공유해야 할 문자 표현이 있으면 재정의하지만 아래와 같은 클래스들은 재정의하지 않아도 된다.

  • 정적 유틸리티 클래스
  • 열거 타입

autoValue

autoValue는 toString도 생성해준다. 각 필드의 내용을 멋지게 나타내 주기는 하지만 클래스의 ‘의미’까지 파악하지는 못한다.

0개의 댓글