Object.toString() 메서드는 객체의 정보를 문자열 형태로 제공한다. 그래서 디버깅과 로깅에 유용하게 사용된다.
이 메서드는 Object 클래스에 정의되므로 모든 클래스에서 상속받아 사용할 수 있다.
코드로 확인해보자.
package lang.object.tostring;
public class ToStringMain1 {
public static void main(String[] args) {
Object object = new Object();
String string = object.toString();
// toString() 메서드는 객체의 문자열 표현을 반환한다.
System.out.println(string);
// object 직접 출력
System.out.println(object);
}
}
java.lang.Object@10f87f48
java.lang.Object@10f87f48
Object.toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
println() 과 toString()
그런데 toString() 의 결과를 출력한 코드와 object 를 println()에 직접 출력한 코드의 결과가 완전히 같다.
Object object = new Object();
String string = object.toString();
// toString() 메서드는 객체의 문자열 표현을 반환한다.
System.out.println(string);
// object 직접 출력
System.out.println(object);
System.out.println() 메서드는 사실 내부에서 toString() 을 호출한다.
Object 타입(자식 포함)이 println() 에 인수로 전달되면 내부에서 obj.toString() 메서드를 호출해서 결과를 출력한다.
public void println(Object x) {
String a String.valueOf(x);
}
public static String valueOf (Object obj) {
return (obj == null) ? "null" : obj.toString();
}
따라서 println() 을 사용할 때, toString() 을 직접 호출할 필요 없이 객체를 바로 전달하면 객체의 정보를 출력할 수 있다.
Object.toString() 메서드가 클래스 정보와 참조값을 제공하지만 이 정보만으로는 객체의 상태를 적절히 나타내지 못한다. 그래서 보통 toString() 을 재정의(오버라이딩)해서 보다 유용한 정보를 제공하는 것이 일반적이다.
package lang.object.tostring;
public class Car {
private String carName;
public Car(String carName) {
this.carName = carName;
}
}
package lang.object.tostring;
public class Dog {
private String dogName;
private int age;
public Dog(String dogName, int age) {
this.dogName = dogName;
this.age = age;
}
// toString() 메서드를 오버라이딩한다.
@Override
public String toString() {
return "Dog{" +
"dogName='" + dogName + '\'' +
", age=" + age +
'}';
}
}
package lang.object.tostring;
public class ToStringMain2 {
public static void main(String[] args) {
Dog dog = new Dog("멍멍이", 3);
System.out.println(dog);
Car car = new Car("람보르기니");
System.out.println(car);
}
}
Dog{dogName='멍멍이', age=3}
lang.object.tostring.Car@133314b