Java의 Object 클래스에는 toString() 메서드가 정의되어 있으며,
기본적으로 객체의 정보를 문자열 형태로 반환한다.
이 메서드는 디버깅이나 로깅 과정에서 객체 상태를 확인할 때 유용하게 사용된다.
추가로, Object 클래스에 정의 되므로 모든 클래스에서 상속 받아 이용할 수 있다.
package poly.toString;
public class ToStringMain1 {
static void main(String[] args) {
Object object = new Object();
String string = object.toString();
// toString() 변환값 출력
System.out.println(string);
// object 직접 출력
System.out.println(object);
}
}
Object가 제공하는 toString() 메서드는 패키지를 포함한 객체의 이름과 객체의 참조값을 16진수로 제공한다.
그런데 toString()의 결과와 object를 출력한 것과 결과가 같다.
어떤 이유 때문에 그런 것일까?
//toString() 반환값 출력
String string = object.toString();
System.out.println(string);
//object 직접 출력
System.out.println(object);
system.out.println() 메서드는 사실 toString()을 호출한다.
Object 타입이 println()에 인수로 전달되면 toString() 메서드를 호출해서 결과를 출력한다.
따라서, println()을 사용할 때 toString()을 직접 호출하지 않고도 원하는 결과를 얻을 수 있다.
Object.toString() 메서드는 클래스의 정보와 참조값을 출력한다.
다만 이 정보만으로는 우리가 원하는 객체의 상태를 적절하게 확인하기가 쉽지가 않다.
그래서 보통 toString()을 오버라이딩 하여 유용한 정보를 제공하는 것이 일반적이다.
package poly.toString;
public class Dog {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}