반응형
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다.
아이템 12. toString을 항상 재정의하라
Object의 기본 toString메서드는 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없고, PhoneNumber@abdbd처럼 단순히 클래스_이름@16진수로 표시한_해시코드를 반환한다.
toString
1. toString은 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야한다.
2. toString의 규약은 "모든 하위 클래스에서 이 메서드를 재정의하라"고 한다.
3. toString을 잘 구현한 클래스는 코딩의 질이 올라간다.
4. 실전에서 toString은 그 객체가 가진 주요 정보 모두를 반환하는 게 좋다.
5. 포맷 명시 여부와 별개로 toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하는 것이 좋다.
6. 포맷을 명시하든 아니든 의도는 명확히 밝혀야 한다.
ex 1) 포맷을 명시한 toString의 예
/**
* 해당 PhoneNumber 객체의 전화번호 문자열을 반환한다.
* 이 문자열은 "XXX-YYY-ZZZZ" 형태의 12글자로 구성된다.
* XXX: areaCode, YYY: prefix, ZZZZ: lineNum
* 각각의 대문자는 10진수 숫자 하나를 나타낸다.
*
* 전화번호의 각 부분의 값이 너무 작아서 자릿수를 채울 수 없다면 앞에서부터 0으로 채운다.
* ex) lineNum이 123일 경우, "0123" 이 된다.
*/
@Override
public String toString() {
return String.format("%03d-%03d-%04d", areaCode, prefix, lineNum);
}
ex 2) 포맷을 명시하지 않은 toString의 예
/**
* 사람 정보에 대한 대략적인 설명을 반환한다.
* 아직 포맷이 정해지지 않았으며, 추후에 변경될 수 있다.
*
* ex) "[이름=김멍목, 성별=남성]"
*/
@Override
public String toString() {
...
}
정리
새롭게 생성한 클래스에서 Object의 toString을 재정의하자. (상위 클래스에서 알맞게 재정의한 경우 제외)
toString을 알맞게 재정의하면 디버깅이 훨씬 편해진다.
반응형
'BE > Java' 카테고리의 다른 글
[Effective Java] 아이템 14. Comparable을 구현할지 고려하라 (0) | 2022.09.15 |
---|---|
[Effective Java] 아이템 13. clone 재정의는 주의해서 진행하라 (0) | 2022.09.14 |
[Effective Java] 아이템 11. equals를 재정의하려거든 hashCode도 재정의하라 (0) | 2022.09.12 |
[Effective Java] 아이템 10. equals는 일반 규약을 지켜 재정의하라 (2) | 2022.09.11 |
[Effective Java] 아이템 9. try-finally보다는 try-with-resources를 사용하라 (0) | 2022.09.07 |