티스토리 뷰
Object의 기본 toString 메서드
Object의 기본 toString 메서드는 PhoneNumber@adbbd 와 같은 형태로 클래스_이름@16진수_해시코드 를 반환한다. toString 의 일반 규약은 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환하도록 가이드하고 있다. toString의 규약은 모든 하위 클래스에서 이 메서드를 재정의하라 고 알려준다.
toString이 사용되는 대표적인 경우가 로깅이다. 이 메서드를 제대로 정의하지 않는다면 쓸모없는 메시지만 로그에 남게 된다.
좋은 toString 메서드
toString을 구현할 때면 반환값의 포맷을 문서화할지 종해야 한다. 포맷을 명시하면 그 객체는 표준적이고, 명확하고, 사람이 읽을 수 있게 된다. 반면에 포맷을 명시함으로써 그 클래스가 포맷에 얽매이게 된다는 단점도 있다. 포맷을 맞추기 위한 작업을 모든 객체에 적용해 주어야 한다. 포맷이 바뀔 경우에는 변경공수가 커진다는 점도 있다.
포맷 명시 여부와 상관없이. toString 이 반환할 값에 포함된 정보를 얻어올 수 있는 API를 제공해야 한다. "010-1234-5678" 이라는 형태의 문자열을 반환해주는 전화번호 클래스의 toString 메서드를 구현했다고 가정하자. 이 때 전화번호 클래스는 통신사번호, 지역할당번호, 일련번호를 각각 반환할 수 있는 메서드를 제공해 주어야 한다. 그렇지 않으면 클라이언트는 클래스의 세부기능을 사용하기 위해 toString 메서드를 파싱하는 코드를 작성해야 한다.
정리
toString 메서드도 실무에서 잘 사용하는 대상이라 익숙하다. 종종 toString 메서드를 프레임워크나 라이브러리와 결합해 활용하는 경우를 보게된다. 이 때에는 프레임워크나 라이브러리에서 인터페이스를 제공해주면 좋겠다는 생각이 든다. toString은 객체의 문자열 표현이다. 클래스를 정의한 작성자가 문자열 표현을 정의하는 것이기 때문에 프레임워크나 라이브러리의 관점에서 필요한 문자열이라면, 그 의도를 표현하는 인터페이스를 제공하는게 좋다고 생각한다.
롬복에서도 ToString 애노테이션을 제공한다. 이 때 해당 객체가 상속관계에 있다면 callSuper 옵션 설정을 고려해야 한다. 이 옵션의 기본값은 false이기 때문에, 상위클래스의 정보는 무시하게 된다.
'프로그래밍 > Effective Java' 카테고리의 다른 글
아이템 14. Comparable 을 구현할 지 고려하라 (1) | 2024.08.18 |
---|---|
아이템 13. clone 재정의는 주의해서 진행하라 (1) | 2024.08.04 |
아이템 11. equals를 재정의하려거든 hashCode도 재정의하라 (1) | 2024.07.14 |
아이템 10. equals는 일반 규약을 지켜 재정의하라 (0) | 2024.07.07 |
아이템 9. try-finally 보다는 try-with-resources 를 사용하라 (0) | 2024.07.07 |
- Total
- Today
- Yesterday