toString()

SungMin·2026년 5월 22일

자바 심화 정리

목록 보기
4/34

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()을 직접 호출하지 않고도 원하는 결과를 얻을 수 있다.


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 +
                '}';
    }
}

[정리]

  • Object.toString()은 기본적으로 클래스 정보 + 해시코드를 반환한다.
  • System.out.println()은 내부적으로 toString()을 호출한다.
  • 기본 구현만으로는 객체 상태를 확인하기 어렵기 때문에 실제 개발에서는 toString()을 오버라이딩하는 것이 일반적이다.
  • 디버깅과 로그 확인이 훨씬 쉬워진다.
profile
오늘도 한 걸음씩 나아가

0개의 댓글