[Effective Java] 아이템 12 - toString을 항상 재정의하라

HyeBin, Park·2022년 5월 8일
0

Effective Java Study

목록 보기
10/20
post-thumbnail

아이템12 : toString을 항상 재정의하라

📑 toString

  • 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야 한다.
  • 모든 하위 클래스에서 이 메서드를 재정의하라
  • 객체를 println, printf, 문자열 연결 연산자, assert 구문에 넘길 때, 혹은 디버거가 객체를 출력할 때 자동으로 불린다 !!!
    -> 즉, 직접 호출 하지 않아도 다른 어딘가에서 쓰일 것이다.
  • 오류 메시지를 로깅할 때 자동으로 호출할 수 있다.
    -> toString을 제대로 재정의해야 의미 있는 메시지만 로그에 남을 것이다.
  • 그 객체가 가진 주요 정보를 모두 반환하는게 좋다.

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

<장점>

  • 포멧을 명시하면 그 객체는 표준적이고, 명확하고, 사람이 읽을 수 있게 된다.
  • 값을 그대로 입출력에 사용하거나 CSV 파일처럼 사람이 읽을 수 있는 데이터 객체로 저장할 수도 있다.
    -> 명시한 포맷에 맞는 문자열과 객체를 상호 전환할 수 있는 정적 팩터리나 생성자를 함꼐 제공해주면 좋다.

<단점>

  • 한번 명시하면 평생 그 포맷에 얽매이게 된다.
    -> 이를 사용하는 프로그래머들은 그 포맷에 맞춰 파싱하고, 새로운 객체를 만들고, 영속 데이터로 저장하는 코드를 작성할 것이다.
  • 향후 릴리스에서 포맷을 바꾼다면 모든 코드가 바뀌게 될 것이다.
    -> 유연성이 없음

<주의>

  • 포맷의 명시 여부와 상관 없이 의도는 명확히 밝혀야한다.
  • 포맷의 명시 여부와 상관없이 toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자.

정적 유틸리티 클래스와 열거타입은 toString을 제공할 이유가 없다. 추상 클래스는 재정의 해주자 !

0개의 댓글