회원가입

toString()

Beany 2024-12-01

ChatGPT 요약

객체의 정보를 문자열로 제공하는 Object.toString() 메서드는 디버깅과 로깅에 유용하며, 모든 클래스에서 상속받아 사용할 수 있다. toString()은 객체의 이름과 참조값(해시코드)을 16진수로 반환한다. println()은 내부적으로 toString()을 호출하는데, toString()을 직접 호출하지 않고 객체를 바로 전달하면 정보가 출력된다. 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@10f87f48
java.lang.Object@10f87f48

 

Object.toString()

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
  • Object 가 제공하는 toString() 메서드는 기본적으로 패키지를 포함한 객체의 이름과 객체의 참조값(해시코드)를 16진수로 제공한다.

 

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() 을 직접 호출할 필요 없이 객체를 바로 전달하면 객체의 정보를 출력할 수 있다.

 

 

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

 

0 0
JAVA
이 공간은 개인 공부를 통해 얻은 정보를 체계적으로 정리하고 공유하는 곳입니다. 학습한 내용, 발견한 지식, 그리고 문제 해결 방법 등을 기록하여 나만의 학습 자료를 구축하고, 필요할 때 쉽게 참고할 수 있는 유용한 자원으로 활용할 수 있도록 합니다.
Yesterday: 456
Today: 43