Backend/☕️ Java

[Java] toString() 메서드

Hugehoo 2022. 7. 3. 14:05

Object 클래스 

자바의 모든 클래스들은 가장 최상위 클래스인 Object 클래스를 상속받는다.

일반적으로 상속은 extends 키워드를 사용하지만, 자바 컴파일러 덕분에 extedns 없이 자동으로 Object 클래스를 자동 상속받게 된다.

즉, 우리가 개발하는 모든 클래스는 자동으로 Object 클래스에 미리 정의된 메서드나 변수를 상속받아 사용할 수 있게 된다.

 

Object.toString() 메서드

Object 클래스에 정의된 메서드로, 객체의 문자정보를 Class(이름)@16진수의 해시 코드로 출력하는 기능을 가진다. 

public static void main(String[] args) {
    Sample sample = new Sample();
    System.out.println(sample.toString());
}

출력 결과

 

일반 클래스의 toString()

메서드명 그대로, 객체의 정보를 String 형으로 리턴한다.

위에서 언급했듯이 Object.toString() 을 그대로 사용하면 인간이 알아보기 힘든 16진수의 객체 정보를 리턴하기 때문에, 하위 클래스에서는 해당 메서드를 적절히 오버라이딩 하는 방식으로 사용한다. 

tip : IntelliJ 를 사용할 땐, 해당 클래스에서 cmd + O 를 누르면 오버라이드할 메서드를 선택할 수 있다.

public class Sample {
    public String name;

    @Override
    public String toString() {
        return "name : " + name;
    }
}

name 을 정의하지 않았기 때문에, null 값이 출력된다.

 

String 클래스의 toString()

String 클래스의 객체를 선언해보자.

public class Sample {

    String job = "developer";

    public void samplePrint() {
        System.out.println(job);
    }
}

samplePrint() 메서드를 호출하면 developer 라는 문자가 출력된다.

당연한 것 아니냐고? 세상에 당연한건 없다. 

job 변수는 "developer" 라는 문자열이 할당된 변수이기도 하지만, String 클래스의 객체이기도 하다. 

만약 String 의 객체가 아닌 Sample 클래스의 객체를 프린트 했어도, 인간이 알아볼 수 있는 문자로 출력될까? toString 메서드를 오버라이드 하지 않았다면, 그렇지 않다. 가장 위의 출력 결과처럼 Sample@15b204a1 라는 16진수의 값이 출력될 뿐이다. 

 

즉 String 객체를 출력할 땐, 해당 객체에 할당된 값을 별도의 toString() 메서드 호출 없이 출력한다.