Skip to content

Latest commit

 

History

History
64 lines (48 loc) · 2.48 KB

12.유용한 정보를 가지도록 toString을 재정의하자.md

File metadata and controls

64 lines (48 loc) · 2.48 KB

12. 유용한 정보를 가지도록 toString을 재정의하자

toString 이란

  • 자바에서 가장 최상위 클래스인 Object 클래스의 메서드

  • toString 메서드는 객체의 문자 정보 즉, 객체를 문자열로 표현한 값을 리턴함

재정의해야 하는 이유

  • ObjecttoString 메서드 리턴값은 클래스명@16진수해시코드로 구성되어 별 값어치가 없는 정보가 반환됨
  • 디버깅을 할 때나 println 구문에 객체를 넘길 때 등 자동으로 toString 이 호출됨
  • 만약 toString 을 재정의하지 않는다면 쓸데없는 정보가 출력되기 때문에 간결하고 유용한 정보를 리턴하도록 재정의해야 함
public class WinningLotto {
    private Lotto lotto;
    private LottoNumber lottoNumber;
}

재정의하지 않은 경우

System.out.println(winningLotto);
출력: WinningLotto@55b0dcab
  • 그다지 쓸모가 없는 메시지가 출력됨

적절하게 재정의한 경우

@Override
public String toString() {
    return "당첨 번호{" +
        "로또 번호=" + lotto +
        ", 보너스 번호=" + bonus +
        "}";
}
출력: 당첨 번호{로또 번호=[1, 2, 3, 4, 5, 6], 보너스 번호=7}
  • 재정의하지 않은 경우보다 훨씬 유용한 정보가 출력됨

지켜야할 점

  • 주요 정보를 모두 반환하자
    • toString 을 재정의할 때 가능한 객체 스스로를 완벽히 설명하는 문자열이 될 수 있도록 주요 정보를 모두 반환하는 것이 좋음
    • 만약 정확하게 설명이 안된다면 요약 정보를 담아야 함
      • 로또 목록(총 500000000개)
  • toString 에 포함된 정보를 얻어올 수 있도록 API를 제공하자
    • 위의 예시에서는 로또 번호와 보너스 번호용 접근자를 제공해야 함
    • 그렇지 않으면 이 정보가 필요한 프로그래머는 toString 의 반환값을 파싱해서 사용해야 함
      • 쓸데 없는 연산이 추가됨

toString 을 제공하지 않아도 되는 경우

  • 정적 유틸리티 클래스
    • 정적이기 때문에 객체의 상태 정보를 담을 필요가 없음
    • 따라서 toString 을 제공하지 않아도 됨
  • 열거 타입
    • 자바에서 이미 완벽한 toString 을 제공하기 때문에 굳이 우리가 만들지 않아도 됨