규칙 10. toString은 항상 재정의하라

java.lang.Object 클래스가 toString 메서드를 제공하긴 하지만 이 메서드가 반환하는 문자열은 일반적으로 사용자가 보려는 문자열이 아니다.

toStirng의 일반 규약에는 “모든 하위 클래스는 이 메서드를 재정의함이 바람직하다”라고 나와있다.
equals와 hashCode의 일반 규약을 지키는 것보다는 덜 중요하지만 toString을 잘 만들어놓으면 클래스를 좀 더 쾌적하게 사용할 수 있다.
toString메서드를 재정의하면 해당객체 뿐만아니라 이를 참조하는 특히 컬렉션 까지 혜택을 본다.

가능하다면 toString 메서드는 객체 내의 중요 정보를 전부 담아 반환해야 한다. 문자열에 담긴 내용은 척 보면 그 의미를 알 수 있도록 하는 것이 제일 바람직하다.
하지만 객체가 아주 크거나 문자열로 반환하기 까다로운 상태정보의 경우 전부 문자열로 반환하는것은 바람직하지 않다.

문자열의 형식

toString의 반환값 즉 문자열의 형식을 지정(ex. xml) 해 둘 경우 프로그래머가 객체를 문자열로, 문자열을 객체로 자유로이 변환할 수 있어 편리하다. 하지만 문자열의 형식을 명시 해 둘 경우 해당클래스가 널리 쓰인다고 가정했을 때 그 형식을 바꾸지 못한다는 단점이 있다. 이를 파싱해서 쓰는 사람도 있을것이고 지속적으로 저장하려는 사람도 있을것이기 때문에 혹시라도 toString이 반환하는 형태를 바꾸게 되면 많은 문제점들이 야기될것을 뻔한일이다.

결국 toString이 반환하는 문자열의 형식을 명시하건 그렇지 않건 간에 어떤 의도인지는 문서에 분명하게 남겨야 한다.
또한 toString을 통해 갖고올 수 있는 정보들은 프로그래밍을 통해서도 갖고올 수 있어야한다.

Share