Object의 기본 toString 메서드가 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없다.
이 메서드는 PhoneNumber@abbd처럼 단순히 클래스_이름@16진수로_표시한_해시코드 를 반환할 뿐이다.
toString의 규약은 "모든 하위 클래스에서 이 메서드를 재정의하라" 라고 한다.
toString을 잘 구현한 클래스는 사용하기에 훨씬 편하고 디버깅하기 편해진다.
toString 메서드는 객체를 println, printf, 문자열 연결 등, 혹은 디버거가 객체를 출력할 때 자동으로 호출된다.
직접 호출하지 않아도 어디선가 쓰일 것이다.
그렇기에 실전에서 toString은 보안에 문제가 되지 않는 한 그 객체가 가진 주요 정보 모두를 반환하는게 좋다.
toString을 구현할 때면 반환값의 포맷을 문서화할지 정해야 한다.
전화번호나 행렬 같은 값 클래스라면 문서화하기를 권한다.
포맷을 명시하면 그 객체는 표준적이고, 명확하고, 사람이 읽을 수 있게 된다.
하지만 포맷을 한번 명시하면 항상 그 포맷에 얽매이기 때문에 유연성을 읽을 수 있는 단점이 있다.
결국은 toStinrg의 의도를 명확히 밝히는 것이 중요하다.
정적 유틸리스 클래스라면 toString을 제공할 이유가 없다.
또, 열거타입도 자바가 완벽한 toString을 제공하기 때문에 재정의하지 않아도 된다.
하지만 하위클래스들이 공유해야 하는 문자열이 있는 추상 클래스라면 toString을 재정의해줘야 한다.
SpringBoot에서는 @toString 어노테이션을 지원해주는데 , 자동으로 toString을 생성해준다.
값을 확인하는 DTO와 같은 객체에 사용하고 있다.
'JAVA > 이펙티브 자바' 카테고리의 다른 글
14. Comparable을 구현할지 고려하라 (0) | 2023.07.01 |
---|---|
13. clone 재정의는 주의해서 진행하라 (0) | 2023.07.01 |
11. equals를 재정의하려거든 hashCode도 재정의하라 (0) | 2023.07.01 |
10. equals는 일반 규약을 지켜 재정의하라 (0) | 2023.06.26 |
9.try-finally보다는 try-with-resources를 사용하라 (0) | 2023.06.20 |