Item 10. toString은 항상 재정의하라.
- toString을 잘 만들어 놓으면 클래스를 좀더 쾌적하게 사용할 수 있다.
- 가능하다면 toString함수는 객체 내의 중요 정보를 전부 담아 반환해야 한다.
- toString이 반환하는 문자열의 형식을 명시하건 그렇지 않건 간에, 어떤 의도인지는 문서에 분명하게 남겨야 한다.
- 문자열 형식을 명시하건 그렇지 않건 간에, toString이 반환하는 문자열에 포함되는 정보들은 전부 프로그래밍을 통해서 가져올 수 있도록(programmatic access) 하자. 예를 들어, PhoneNumber 클래스는 지역번호, 국번, 회선 번호등의 정보를 가져올 수 있는 접근자(accessor)함수를 포함해야 한다.그렇지 않으면 이를 사용하는 다른 프로그그래머들은 이와 같은 정보를 가져오기 위해서 toString을 파싱하려 들 것이다. 이는 성능을 느리게 하고, toString의 문자열 형식을 바꾸면 망가지는 시스템이 될 수 있다. ```java /**
- 전화번호를 문자열로 변환해서 반환한다.
- 문자열은 “(XXX) YYY-ZZZZ” 형식으로, 14개 문자로 구성된다.
- XXX는 지역번호, YYY는 국번, ZZZZ는 회선 번호다. 각 문자(X, Y, Z)는 하나의 숫자다. *
- 전화번호의 각 필드가 주어진 자리를 다 채우지 못할 경우 필드 앞에는
- 0이 붙는다. 예를 들어, 회선 버호가 123일 경우, 위 문자열 마지막 필드에
- 채워지는 문자열은 “0123”이 된다. *
- 지역번호를 닫는 괄호와 국번 사이에는 공백이 온다는 것에 주의하자. */ @Override public String toString(){ return String.format(“(%03d) %03d-%04d”, areaCode, prefix, lineNumber); } ```
형식을 명시하지 않기로 했다면 주석은 아래와 같이 달자.
/**
* 물약(potion)의 내용을 간단히 설명하는 문자열을 반환다.
* 정해진 문자열 형식은 없으며, 바뀔 수 있다.
* 하지만 대체로 아래와 같은 문자열이 반환된다.
*
* "[Potion #9: type=love, smell=turpentine, look=india ink]"
*/
@Override public String toString(){ ... }