[Effective Java] 아이템 12 - toString을 항상 재정의하라
아이템12 : toString을 항상 재정의하라
📑 toString
- 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야 한다.
- 모든 하위 클래스에서 이 메서드를 재정의하라
- 객체를 println, printf, 문자열 연결 연산자, assert 구문에 넘길 때, 혹은 디버거가 객체를 출력할 때 자동으로 불린다 !!!
-> 즉, 직접 호출 하지 않아도 다른 어딘가에서 쓰일 것이다.
- 오류 메시지를 로깅할 때 자동으로 호출할 수 있다.
-> toString을 제대로 재정의해야 의미 있는 메시지만 로그에 남을 것이다.
- 그 객체가 가진 주요 정보를 모두 반환하는게 좋다.
📕 toString 문서화 : 반환값의 포맷을 문서화할지 정해야한다.
<장점>
- 포멧을 명시하면 그 객체는 표준적이고, 명확하고, 사람이 읽을 수 있게 된다.
- 값을 그대로 입출력에 사용하거나 CSV 파일처럼 사람이 읽을 수 있는 데이터 객체로 저장할 수도 있다.
-> 명시한 포맷에 맞는 문자열과 객체를 상호 전환할 수 있는 정적 팩터리나 생성자를 함꼐 제공해주면 좋다.
<단점>
- 한번 명시하면 평생 그 포맷에 얽매이게 된다.
-> 이를 사용하는 프로그래머들은 그 포맷에 맞춰 파싱하고, 새로운 객체를 만들고, 영속 데이터로 저장하는 코드를 작성할 것이다.
- 향후 릴리스에서 포맷을 바꾼다면 모든 코드가 바뀌게 될 것이다.
-> 유연성이 없음
<주의>
- 포맷의 명시 여부와 상관 없이 의도는 명확히 밝혀야한다.
- 포맷의 명시 여부와 상관없이 toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자.
정적 유틸리티 클래스와 열거타입은 toString을 제공할 이유가 없다. 추상 클래스는 재정의 해주자 !