[Java] toString()

2025. 2. 4. 23:49·TIL/Java

toString() 메서드

  • Object 클래스가 제공하는 메서드 중 하나이다
  • 객체의 정보를 문자열 형태로 제공해준다
  • 디버깅과 로깅에 유용하게 사용되는 메서드이다
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
  • Object 클래스에 선언되어 있는 toString의 내용이다
  • 클래스의 정보와 이름@16진수해시코드 형태로 제공한다
public class ToStringMain {

    public static void main(String[] args) {
        Object obj = new Object();
        String objString = obj.toString();

        System.out.println(objString);
        System.out.println(obj);
    }
}

// 결과 java.lang.Object@4c873330
// 결과 java.lang.Object@4c873330
  • toString()을 통해 객체의 정보를 String으로 받은 결과와 객체를 바로 출력한 결과가 동일하다 어떻게 된 일일까?
// Object 클래스를 인자로 받았을 때 호출되는 println 메서드
public void println(Object x) {
    String s = String.valueOf(x);
    if (getClass() == PrintStream.class) {
        // need to apply String.valueOf again since first invocation
        // might return null
        writeln(String.valueOf(s));
    } else {
        synchronized (this) {
            print(s);
            newLine();
        }
    }
}
// 그 중 활용되는 valueOf 메서드
public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}
  • Object 객체를 인자로 받았을 때, obj.toString()의 결과를 호출하고 있는 것을 알 수 있다
  • 따라서 toString() 호출을 할 필요 없이 바로 객체를 전달해도 된다.
  • 그렇다면 toString() 메서드를 호출할 일은 없을까?

toString() 오버라이딩

  • 사실 현재 toString() 메서드가 반환해주는 값은 객체의 정보를 파악하기에 그다지 도움이 되지 않는 정보들이다.
  • 따라서 오버라이딩을 통해 객체가 갖고 있는 정보 중 원하는 것들을 출력하도록 수정하면 된다
public class Dog {

    private String dogName;
    private int age;

    public Dog(String dogName, int age) {
        this.dogName = dogName;
        this.age = age;
    }

//    원하는 스타일로 커스텀
//    @Override
//    public String toString() {
//        return "dogName : " + dogName + ", age : " + age;
//    }

//  IDE 기본 제공
    @Override
    public String toString() {
        return "Dog{" +
                "dogName='" + dogName + '\'' +
                ", age=" + age +
                '}';
    }
}

 

System.out.println() 과 toString()

  • 만약 Object 클래스가 없고, toString() 메서드도 없었다면 개발자들은 직접 각 클래스별로 toString() 메서드를 선언해줘야했기 때문에 서로 다른 객체의 정보를 출력하기 어려웠을 것이다
  • 이런점에서 현재 println() 메서드는 다형성을 잘 활용하고 있다
    • 다형적 참조 : Object 클래스를 매개변수 타입으로 선언함으로서 모든 객체를 인자로 받을 수 있다
    • toString() 메서드 오버라이딩 : 인자로 들어오는 인스턴스가 toString() 메서드를 오버라이딩 했다면 런타임 시점에 해당 인스턴스의 toString()을 호출할 수 있게 된다
    • 따라서 println() 메서드는 구체적인 타입에 의존을 하지 않고도 구현체의 메서드를 호출할 수 있는 것이다
  • println()메서드 내부 valueOf() 메서드에서의 작동 흐름

'TIL > Java' 카테고리의 다른 글

[Java] 불변 객체  (0) 2025.02.06
[Java] equals()  (0) 2025.02.05
[Java] Object 클래스  (1) 2025.02.04
[Java] 추상 클래스  (1) 2025.02.04
[Java] 인터페이스  (0) 2025.02.04
'TIL/Java' 카테고리의 다른 글
  • [Java] 불변 객체
  • [Java] equals()
  • [Java] Object 클래스
  • [Java] 추상 클래스
Charlie.han
Charlie.han
백엔드 개발자가 되기 위해 공부한 것들(Java, Spring, SQL, 네트워크, AWS 등)을 기록하고 공유하는 블로그입니다.
  • Charlie.han
    Chalie's Devlog
    Charlie.han
  • 전체
    오늘
    어제
    • 분류 전체보기 (32)
      • TIL (32)
        • Java (20)
        • Spring (2)
        • SQL (5)
        • 알고리즘 (4)
        • 트러블슈팅 (1)
      • WIL (0)
        • 카카오테크 부트캠프 (0)
  • 태그

    참조공유
    컬렉션프레임워크
    불변객체
    unsupported characters for the charset 'iso-8859-1'
    프로그래머스
    static 필드
    object
    jdk란?
    sql where
    묵시적형변환
    타입안전열거형
    다형성
    인텔리제이 한글 깨짐
    인터페이스
    sql limit
    데이터베이스
    자바
    프로그래머스 소수찾기
    Java
    string
    제네릭 클래스
    프로그래머스 베스트앨범
    인스턴스
    super()
    인텔리제이한글
    SQL
    static메서드
    프로그래머스 베스트앨범 자바
    default메서드
    프로그래머스 소수찾기 자바
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Charlie.han
[Java] toString()
상단으로

티스토리툴바