toString()

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@a09ee92
  java.lang.Object@a09ee92
  public String toString() {
      return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Object 가 제공하는 toString() 메서드는 기본적으로 패키지를 포함한 객체의 이름과 객체의 참조값(해시코드)를 16진수로 제공한다.

참고: 해시코드(hashCode())에 대한 정확한 내용은 이후에 별도로 다룬다. 지금은 객체의 참조값 정도로 생각하면 된다.

그런데 toString() 의 결과를 출력한 코드와 objectprintln() 에 직접 출력한 코드의 결과가 완전히 같다.

//toString() 반환값 출력
String string = object.toString();
System.out.println(string);

//object 직접 출력
System.out.println(object);

System.out.println() 메서드는 사실 내부에서 toString() 을 호출한다.

Object 타입(자식 포함)이 println() 에 인수로 전달되면 내부에서obj.toString() 메서드를 호출해서 결과를 출력한다.

  public void println(Object x) {
      String s = String.valueOf(x);
      //...
}
  public static String valueOf(Object obj) {
      return (obj == null) ? "null" : obj.toString();
}

따라서 println() 을 사용할 때, toString() 을 직접 호출할 필요 없이 객체를 바로 전달하면 객체의 정보를 출력할 수 있다.