toString() 메서드는 객체를 문자열 표현으로 반환해주는 메서드이다.
toString() 메서드는 기본적으로 '클래스이름@hashcode' 문자열을 반환해준다. 예를들면 PhoneNumber@abbaa 이런식이다.
이런 형태는 객체의 상태나 값에 대한 유용한 정보를 제공하지 않기때문에 재정의해 의미있게 표현해야한다.
예를들어 이러한 클래스가 있다고 예시를 들어보자 :
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 객체의 문자열 표현을 반환합니다.
* 이 문자열 표현은 객체의 주요 정보를 요약하여 제공하며,
* 디버깅과 로깅 목적으로 유용합니다.
*
* 반환되는 문자열의 포맷은 "Person{name='이름', age=나이}" 입니다.
* 여기서, '이름'과 '나이'는 각각 객체의 name과 age 필드의 현재 값을 나타냅니다.
*
* @return 객체의 문자열 표현
*/
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
// 사용 예:
Person person = new Person("John Doe", 30);
System.out.println(person.toString()); // 출력: Person{name='John Doe', age=30}
예시처럼 toString()을 재정의 했을 경우 Person{name='John Doe', age=30} 같이 반환된다.
Person 객체에 담긴 name, age같은 정보가 출력되어 디버깅, 로깅시 유용하다.
만약 이를 재정의하지 않았을경우 출력값은 Person@b58a 이런식으로 출력됬을것이다.
그리고 예시처럼 반드시 반환값의 포맷을 명시하든 아니든 재정의 하려는 의도를 반드시 명확하게 밝혀야 한다.
구글의 AutoValue같은 프레임워크로 toString 재정의시 각 필드의 내용등을 설명해주긴 한다. 하지만 개발자가 원하는 클래스의 '의미'까지는 알지는 못. 개발자가 원하는 의도에 맞게 작성해주자.
결론 : toString() 메서드는 재정의해주자. 재정의시 의도를 명확하게 작성해주자. 재정의해 디버깅시 유용하게 사용하자. 재저
'이펙티브 자바' 카테고리의 다른 글
[이펙티브 자바] 아이템 14. Comparable을 구현할지 고려하라 (0) | 2024.03.14 |
---|---|
[이펙티브 자바] 아이템 13. clone 재정의는 주의해서 진행하라 (3) | 2024.03.14 |
[이펙티브 자바] 아이템 11. equals를 재정의하려거든 hashcode도 재정의하라 (0) | 2024.03.12 |
[이펙티브 자바] 아이템 10. equals는 일반 규약을 지켜 재정의하라 (0) | 2024.03.12 |
[이펙티브 자바] 아이템 9. try-finally보다는 try-with-resources를 사용하라 (0) | 2024.03.11 |