ITEM 12: overriding toString

Object의 기본 toString 메서드는 단순히 클래스_이름@16진수해시코드를 반환한다.

toString의 일반 규약은 다음과 같다.

  • 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환

  • 모든 하위 클래스에서 이 메서드(toString)를 재정의하라

toString을 잘 구현한 클래스는 디버깅에 유용하며, 직접 호출하지 않더라도 다른 어딘가(println, printf, 문자열 연결 연산자, assert 에 자동으로 호출)에서 쓰일 것이다.

만약 toString을 제대로 재정의했다면 다음 코드만으로도 로그를 충분히 기록할 수 있다.

System.out.println(phoneNumber + "에 연결할 수 없습니다.");

toString을 잘 정의하면 컬렉션과 같이 이 인스턴스를 포함하는 객체에서 유용하게 쓰인다.

  • toString은 그 객체가 가진 주요 정보를 모두 반환하는 것이 좋다.

하지만 객체가 거대하거나 객체의 상태가 문자열로 표현하기에 적합하지 않다면 무리가 있다. 이런 상황에는 요약 정보를 담는 것이 좋다.

  • 포맷을 명시하든 아니든 의도는 명확히 밝혀야한다.

  • toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자

예를들어 앞서 생성한 PhoneNumber 클래스는 지역 코드, 프리필스, 가입자 번호용 접근자를 제공해야 한다. 그렇지 않다면 이 정보가 필요한 프로그래머는 toString의 반환값을 파싱해야하며, 이는 성능이 나빠질 뿐더러, 필요하지 않은 작업이다.

정적 유틸리티 클래스toString을 제공할 필요가 없으며, 대부분의 열거타입도 자바가 이미 완벽한 toString을 제공하므로 따로 제정의하지 않아도 된다.

Last updated