본문으로 바로가기

1. toString

일반적으로 toString() 메서드는 클래스 이름과 해시코드 정보를 반환하지만, 재정의하면 사용자에게 유용한 정보를 반환하며 디버깅하기 쉬워진다.

toString() 메서드는 문자열 연결이나 출력 메서드 혹은 assert 구문에서 자동으로 호출된다. 실전에서는 해당 객체가 가진 주요 정보를 toString()으로 반환하는게 좋다.

 

2. Format

toString 반환값의 포맷을 문서화할지 정해야 한다.

 

  • 포맷을 명시하면 입출력 활용 혹은 CSV 파일처럼 사람이 읽을 수 있는 데이터 객체로 저장이 가능하다.
  • 포맷을 명시한다면 명시한 포맷과 객체를 상호 전환할 수 있는 정적 팩토리 메서드 혹은 생성자가 있으면 좋다.

포맷을 명시하면 해당 포맷에 얽매이게 되며 유연성이 하락한다.

 

  • 클라이언트가 포맷에 맞춰 파싱하고 객체를 생성하며 영속 데이터를 저장하는 코드를 작성할 것이다.
  • 이러한 의존성으로 인해 추후 포맷을 변경하기 어려워진다.
  • 포맷 명시 유무에 상관없이 toString의 의도를 주석 등으로 표기해야 한다.

toString이 반환하는 값에 포함되는 정보를 얻어올 수 있는 API를 제공해야 한다.

  • 그렇지 않으면 해당 정보가 필요할 때 toString 반환값을 파싱해서 추출하는 번거로운 작업이 추가되어 성능 하락으로 이어진다.
  • 특히, 추후 포맷이 변경되면 기존에 진행되던 파싱 작업에도 영향을 끼쳐 시스템이 망가질 수 있다.
@Override public String toString() { ... }

요약

IDE 자체에서 자동생성을 만들어 주기도 하기 때문에 toString을 재정의한 클래스는 사용하기에도 좋고

그 클래스를 사용한 시스템을 디버깅하기 쉽게 해준다.

 

toString은 해당 객체에 과한 명확하고 유용한 정보를 읽기 좋은 형태로 반환해야 한다.