본문 바로가기

Java/Java SE, EE

[Java/Java SE, EE] Object 클래스의 toString()

toString()

Object 클래스가 구현하는 toString() 메소드는 객체(Instance)의 문자 정보를 리턴합니다. 객체의 문자 정보란 객체를 문자열로 표현한 값을 의미합니다.

  • Object 클래스는 자바에서 구현되는 모든 클래스의 최상위 클래스입니다.
  • 따라서 Object 클래스가 구현하는 toString() 메소드는 자바의 모든 객체에서 호출 가능합니다.
System.out.println(new Object().toString());

사실 Object 클래스의 toString()가 리턴하는 값은 특별한 의미가 없는 임의의 문자열입니다(위의 예시 코드는 다음과 같은 결과를 출력합니다).

java.lang.Object@3cb5cdba

Object 클래스의 toString()은 메소드 자체가 갖는 용도는 특별히 없습니다. 대신 하위 클래스가 toString()을 재정의(Overriding)하여 유의미하게 사용하는 것을 권장합니다. 예를 들면 String 클래스와 Date 클래스, File 클래스 등이 toString()을 재정의하고 있습니다.

  • String.class
    객체 자신이 저장하고 있는 '문자열'을 리턴합니다.
  • Date.class
    객체 자신이 저장하고 있는 날짜와 시간 정보를 리턴합니다.
  • File.class
    객체 자신이 저장하고 있는 파일의 경로를 리턴합니다.
  • 그 외 클래스
    객체 자신이 저장하고 있는 임의의 유의미한 데이터를 리턴합니다.

toString()의 재정의

사용자 클래스 역시 toString()를 재정의하여 유의미하게 사용 할 수 있습니다. toString()을 어떻게 재정의하고 사용할 것인지는 온전히 개발자가 결정합니다. 다음 예시는 두 개의 정수(x, y)를 덧셈 연산(+)하는 과정과 결과를 출력하는 Sum 클래스를 구현하고, toString()을 재정의하고 있습니다.

public class Sum {
   public int x, y;
   
   public Sum(int x, int y) {
      this.x = x;
      this.y = y;
   }
   
   @Override
   public String toString() {
      return String.format("%d+%d=%d", this.x, this.y, (this.x + this.y));
   }
}