toString의 일반 규약
- "간결하면서 사람이 읽기 쉬운 형태의 유익한 정보"를 반환해야한다.
- 모든 하위 클래스가 이 메서드를 재정의하는 것이 좋다.
구현의 장점
- toString을 잘 구현한 클래스는 사용하기에 훨씬 즐겁다.
- 그 클래스를 사용한 시스템은 디버깅하기 쉽다.
- 해당 클래스를 직접 호출하지 않더라도 다른 어딘가에서 쓰인다 (printf, 문자열 +연산, assert 등)
실제 구현
그 객체가 가진 주요 정보 모두를 반환하는 게 좋다
포맷 명시에 대하여
장점
- 그 객체는 표준적이고, 명확하고, 사람이 읽을 수 있게 된다
- 그 값 그대로 입출력에 사용하거나 csv 파일 등으로 저장할 수 있다.
- 포맷에 맞는 문자열 <-> 객체를 상호 변환할 수 있는 정적 팩토리 메서드를 제공하는 것이 좋다
단점
- 포맷을 한번 명시하면 평생 그 포맷에 얽매이게 된다.
- 해당 포멧에 맞춰 프로그래머들은 의존성을 만들기 때문에 변경이 굉장히 어려워진다.
의도를 명확히 밝히자
- 포맷을 명시하려면 아주 정확하게 명시하자
- 포맷을 명시하지 않으려면 향후 변경될 수 있음을 고지하자
toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자
toString 값을 파싱하는 것을 피할 수 있다
toString을 제공하지 않아도 되는 경우
정적 유틸리티 클래스: 할 이유가 없다
열거 타입: 자바가 이미 완벽한 toString을 제공한다
toString을 제공하는 경우
하위 클래스들이 공유해야 할 문자열 표현이 있는 추상 클래스