Effect Java 제2판(Joshua Bloch / Addison Wesley) 을 공부하고 정리한 내용 입니다.
10. toString 메소드는 항상 오버라이드 하자.
- 모든 서브 클래스들은 이 메소드를 오버라이드 할 것을 권한다. toString 메소드를 잘 구현하면 우리 클래스를 더욱 편하게 사용할 수 있다.
- 클래스에서 toString 메소드를 잘 구현하면, 자신의 인스턴스는 물론이고 그 인스턴스들의 참조를 갖고 있는 객체들도 toString 메소드의 장점을 가질 수 있다. 가능하다면 toString 메소드에서는 객체의 모든 중요한 정보를 반환해야 한다. 하지만 객체가 너무 크거나 하면 요약된 정보만을 반환해야 할 것이다.
- toString 메소드 반환 값의 형식을 규정 시 단점이 있다. 그 클래스가 여러 곳에서 사용될 경우, 한번 정해 놓으면 두고두고 신경 써야 한다는 것이다.
- 표현 형식의 규정 여부와는 무관하게 아무튼 그 의도를 명쾌하게 문서화해야 한다.
- 형식의 규정 여부와는 관계 없이, toString 메소드의 반환 값에 포함되는 모든 정보를 프로그램적으로 접근하는 방법을 제공하자.
/**
* PhoneNumber 객체(전화번호)의 문자열 표현을 반환한다.
* 문자열은 14자이며 형식은 "(XXX) YYY-ZZZZ" 이다.
* 여기서 XXX는 지역번호이고, YYY는 국번호, ZZZZ은 선번호이다.
* 각 영문 대문자는 한 자리의 십진수를 나타낸다.
* 지정된 자리수가 다 채워지지 않은 경우는 세 부분 모드 0을 앞에 붙인다.
* 예를 들어, 선번호의 값이 123이면, 문자열 표현 시 "0123"이 된다.
* 지역번호의 우 괄호 다음에는 스페이스를 하나 추가한다.
*/
@Override
public String toString() {
return String.format("(%03d) %03d-%04d",
areaCode, prefix, lineNumber);
}
// 만일 이 클래스의 객체를 문자열로 표현하는 형식을 규정하지 않는다면, 다음과
// 같이 주석을 넣는게 좋을 것이다.
/**
* 이 부분의 간략한 표현을 반환한다.
* 반환 문자열의 형식은 정해지지 않았으므로 변결될 수 있다.
* 일반적인 형태는 다음과 같다:
*
* "[Potion #9: type=love, smell=turpentine, look=india link]"
*/
@Override
public String toString() { ... }