아이템 12 : toString을 항상 재정의하라
toString의 규약은 "모든 하위 클래스에서 이 메서드를 재정의하라"이다.
toString을 잘 구현한 클래스는 사용하기에 훨씬 즐겁고, 그 클래스를 사용한 시스템은 디버깅하기 쉽다.
실전에서 toString은 그 객체가 가진 주요 정보 모두를 반환하는 게 좋다.
toString을 구현할 때면 반환값의 포맷을 문서화할지 정해야 한다. 포맷을 명시하면 그 객체는 표준적이고, 명확하고, 사람이 읽을 수 있게 된다. 따라서 그 값 그대로 입출력에 사용하거나 CSV 파일처럼 사람이 읽을 수 있는 데이터 객체로 저장할 수도 있다.
단점도 있다. 포맷을 한번 명시하면 평생 그 포맷에 얽매이게 된다. 이를 사용하는 프로그래머들이 그 포맷에 맞춰 파싱하고, 새로운 객체를 만들고, 영속 데이터로 저장하는 코드를 작성할 것이다.
반대로 포맷을 명시하지 않는다면 향후 릴리스에서 정보를 더 넣거나 포맷을 개선할 수 잇는 유연성을 얻게 된다.
포맷을 명시하든 아니든 의도를 명확히 밝혀야 한다. 포맷을 명시하려면 아주 정확하게 해야 한다.
포맷 명시 여부와 상관없이 toString이 반환한 값에 포함된 정보를 얻어올수 있는 API를 제공하자.
핵심 정리
모든 구체 클래스에서 Object의 toString을 재정의하자. 상위 클래스에서 이미 알맞게 재정의한 경우는 예외다. toString을 재정의한 클래스는 사용하기도 즐겁고 그 클래스를 사용한 시스템을 디버깅하기 쉽게 해준다. toString은 해당 객체에 관한 명확하고 유용한 정보를 읽기 좋은 형태로 반환해야 한다.
'언어 > JAVA' 카테고리의 다른 글
[Effective Java] Comparable을 구현할지 고려하라 (0) | 2020.03.15 |
---|---|
[Effective Java] clone 재정의는 주의해서 진행하라 (0) | 2020.03.15 |
[Effective Java] equals를 재정의하거든 hashCode도 재정의하라 (0) | 2020.03.14 |
[Effective Java] equals는 일반 규약을 지켜 재정의하라 (0) | 2020.03.13 |
[Effective Java] try-finally보다는 try-with-resources를 사용하라 (0) | 2020.03.13 |