NMP-Study / EffectiveJava2022

Effective Java Study 2022
5 stars 0 forks source link

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

Closed okhee closed 2 years ago

okhee commented 2 years ago

Item 12. toString을 항상 재정의 하라

toString은 모든 정보를 반환하는 것이 좋다.

Object.toString : 해당 오브젝트를 잘 나타내는 문자열 표현을 반환

Object.toString 의 기본 구현: 클래스명에 16진수로 표시한 해시코드만 알려줌.

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

ex) PhoneNumber@adbbd → 이런 형태보단.. 실제로 이 인스턴스가 가지고 있는 값을 보여주는게 더 유익하지 않을까? → 이런 경우는 전화번호를 바로 보여주는 것이 좋아보임.

재정의를 잘 했다면 아래와 같은 간단한 코드만으로 충분한 로그를 남길 수 있음

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

실전에서는 toString은 그 객체가 가진 정보를 모두 반환하는 것이 좋음. 가능하면 객체의 값을 모두 나타내는 것이 좋겠지만, 상태가 너무 많다면 요약해서 보여주는 것도 좋음.

toString 반환값의 포맷?

반환값의 포맷을 문서화 할지는 개발자의 선택.

포맷을 명시하든 아니든, 의도는 분명하게 밝혀야 한다!

포맷에 명시하든 아니든, toString에 포함된 정보를 얻을 수 있는 API를 제공하자

ToStringBuilder