toString을 항상 재 정의하라
Object의 toString 메서드가 우리가 생성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없다.
자바 문서에 Object 객체 toString 메서드를 확인해보면 결과값으로 간결한 정보를 담아 누구나 쉽게 읽을 수 있도록 해야하며 모든 서브 클래스가 재 정의하는걸 추천한다고 적혀있다.
println, printf, 문자열 연결 연산자 (+), assert 구문같은 경우에는 객체를 호출할때 자동으로 toString 메서드를 호출한다.
그래서 toString 메서드를 잘 구현한 클래스는 사용하기도 편리하고 디버깅할때도 매우 유용하다.
toString 정의
정적 유틸 클래스는 제외하고 실전에서는 사람 이름, 나이, 전화번호 등과 같은 객체가 가진 주요 정보들을 모두 반환하는게 좋다.
단 객체가 거대하거나 배열과같은 많은 값을 가진 정보라면 반환하지 않는게 좋다.
toString 포맷
toString을 정의할때는 반환값의 포맷을 문서화 할지 말지 결정 해야한다.
장점
포맷을 명시하면 그 객체는 표준이고 명확하며 사람이 읽을 수 있게된다.
단점
포맷을 한번 명시하면 평생 그 포맷에 얽히게된다.
프로그래머들은 포맷에 맞춰 파싱하고, 새로운 객체를 만들고, 영속 데이터로 저장하는 코드를 만들 수 있다.
/**
* 이 전화번호의 문자열 표현을 반환한다.
* 이 문자열은 "XXX-YYY-ZZZZ" 형태의 12글자로 구성된다.
* XXX는 지역 코드, YYY는 프리픽스, ZZZZ는 가입자 번호다.
* 각각의 대문자는 10진수 숫자 하나를 나타낸다.
**
전화번호의 각 부분의 값이 너무 작아서 자릿수를 채울 수 없다면,
* 앞에서부터 0으로 채워나간다. 예컨대 가입자 번호가 123이라면
* 전화번호의 마지막 네 문자는 "0123"이 된다.
*/
@Override public String toString() {
return String.format("%03d-%03d-%04d",
areaCode, prefix, lineNum);
}
포맷 명시여부와 상관없이 의도는 명확해야하며 toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자.
'book review > Effective java' 카테고리의 다른 글
[Effective Java] Item 14. Comparable을 구현할지 고민하라 (0) | 2024.07.03 |
---|---|
[Effective Java] Item 13. clone 재정의는 주의해서 진행하라 (0) | 2024.07.01 |
[Effective Java] Item 11. equals를 재정의하려거든 hashCode도 재정의 해라 (0) | 2024.03.18 |
[Effective Java] Item 10. equals는 일반 규약을 지켜 재 정의하라 (0) | 2024.03.11 |
[Effective Java] Item 9. try-finally보다는 try-with-resources를 사용하라 (0) | 2024.02.14 |