2장_아이템12 - ririkat/effective-java GitHub Wiki
아이템 12. toString을 항상 재정의하라
Object의 기본 toString 메소드는 단순히 클래스_이름@16진수표시해시코드
를 반환할 뿐이다.
toString의 일반 규약
- 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야 한다.
- 모든 하위 클래스에서 이 메소드를 재정의하라
toString을 잘 구현한 클래스의 장점
- 디버깅하기 쉬움
- 객체를 출력할 때 자동으로 호출되기 때문에 직접 사용하지 않더라도 다른 어딘가에서 쓰이게 된다. 따라서 toString을 제대로 재정의하지 않으면 쓸모없는 메세지만 로그에 남을 수 있으므로 잘 재정의해야 한다.
- 이 인스턴스를 포함하는 객체에서 유용하게 쓰임
- 그 객체가 가진 주요 정보 모두를 반환하게 작성하라
- 객체가 거대하거나 객체의 상태가 문자열로 표현하기에 적합하지 않은 경우, toString 반환값의 포맷을 명시하여 문서화하여 사용하는 방법도 있다.
- 포맷 명시 방법은 장,단점이 있다. 포맷을 명시하든 아니든 의도는 명확하게 밝혀야 한다. 포맷을 명시하려면 아주 정확하게 해야 한다.
- 포맷 명시 여부와 상관없이 toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자.
- 정적 유틸리티 클래스와 대부분의 열거 타입은 toString을 재정의하지 않아도 된다. 하지만 하위 클래스들이 공유해야 할 문자열 표현이 있는 추상화 클래스라면 toString을 재정의해줘야 한다.
- 구글 AutoValue 프레임워크는 toString도 생성해준다. (대부분의 IDE도 마찬가지)