Object의 기본 toString 메소드는 별로 유용하지 않은 형태 클래스_이름@16진수로_표시한_해시코드를 반환한다.
해당 객체의 특징을 알려주도록 하위 클래스에서 toString을 재정의하면 디버깅이 매우 편리하다.
equals와 hashCode만큼 중요하진 않지만..
문서화
toString을 구현할 때 반환값의 포맷을 문서화하여 명확하게 정의하는 것이 좋다.
당연한 말이지만 다른 개발자들이 코드를 이해하고 디버깅하기에 편하기 때문
또 명시한 포맷에 맞는 문자열과 객체를 상호 전환할 수 있는 정적 펙토리나 생성자를 함께 제공하면 좋다. 객체->문자열로 변환하는 것 뿐만 아니라, 문자열->객체로 변환하는 것도 쉽게 할 수 있다 !
반대로 문서화의 단점은 형태가 정해져 있기 때문에 유연성이 얻다는 거? 사실 와닿진 않는다.
주의할 점
◾ 포맷 명시 여부와 상관없이 toString에 의도는 명확히 밝혀야 한다. 주석을 이용하자.
◾ 포맷 명시 여부와 상관없이 toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자. 개발자가 객체의 문자열 표현에서 필요한 정보를 쉽게 추출할 수 있도록..
◾ 정적 유틸리티 클래스(아이템 4)는 toString 메소드가 필요없다.
(ex. java.lang.Math)
◾ 열거 타입(아이템 34)는 이미 잘 구현된 toString을 제공하지 재정의하지 않아도 된다.
◾ 하위 클래스들이 공유해야 할 문자열 표현이 있는 추상 클래스라면 toString을 재정의해야 한다.
(ex. 컬렉션 구현체는 추상 컬렉션 클래스의 toString 메소드를 상속하여 사용한다.)
'Language > Java' 카테고리의 다른 글
| [effective java] 아이템 14. Comparable을 구현할지 고려하라. (0) | 2023.03.25 |
|---|---|
| [effective java] 아이템 13. clone 재정의는 주의해서 진행하라. (0) | 2023.03.22 |
| [effective java] 아이템 11. equals를 재정의하려거든 hashCode도 재정의하라. (0) | 2023.03.09 |
| [effective java] 아이템 10. equals는 일반 규약을 지켜 재정의하라. (0) | 2023.03.09 |
| [effective java] 아이템 9. try-finally보다는 try-with-resources를 사용하라. (0) | 2023.03.08 |