스터디/이펙티브 자바

[Effective Java] Item12. toString을 항상 재정의

📝 작성 : 2022.05.21  ⏱ 수정 : 
728x90

toString을 재정의하지 않으면 클래스이름@16진수의해시코드를 반환합니다. 따라서 toString의 일반 규약에 따라서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야합니다.

 

toString메서드는 println, printf, 문자열 연결(+), assert 구문에 넘길때, 디버거가 객체를 출력할 때 자동으로 호출됩니다.
따라서 직접 호출하지 않더라도 무조건 재정의해야 합니다.

 

toString메서드는 객체의 주요 정보를 모두 반환하는 것이 좋습니다. 하지만 객체가 거대하거나 객체의 상태가 문자열로 표현하기 적합하지 않는 경우 요약정보라도 담는 것이 좋습니다.

 

toString메서드는 필요할 경우 포맷을 문서화해야 합니다. 특히 전화번호나 행렬 같은 값 클래스인 경우 권장사항입니다. 단, 포맷을 한번 명시하면 평생 이 포맷을 사용해야 할 수도 있습니다.

 

toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하는 것이 좋습니다. 그렇지 않다면 toString값을 파싱할 수 밖에 없으므로 성능도 나빠지고 향후 포맷을 바꾸면 시스템이 망가질 가능성이 있습니다.

 

정적 유틸 클래스나 Enum의 경우는 따로 toString을 재정의하지 않아도 됩니다. 하지만 하위 클래스들이 공유해야 할 문자열 표현이 있는 추상 클래스는 toString을 재정의해주어야 합니다. (대다수의 컬렉션 구현체는 추상 컬렉션 클래스들의 toString을 상속해서 사용합니다.)

반응형