Java

Java에서 출력할 때 toString()을 생략해도 되는 이유

Yeji Heo 2024. 1. 27. 15:50

많은 사람들이 print(), println() 등 출력메서드를 사용할 때

toString()을 생략해도 된다! 라고 생각만 하거나

혹은 몰랐지만 그냥 그렇게 썼다거나 할 것이다.

 

도대체 왜 그런지 갑자기 궁금해서

패키지 소스코드를 뒤져봤다.

 

1. println()

    //파라미터가 boolean println()
    public void println(boolean x) {
            synchronized (this) {
                print(x);
                newLine();
            }
        }
        
        
    //그 외 여러 오버로딩 된 println()
    .
    .
    .

println()을 살펴보니

print()를 호출하고, 줄바꿈을 한다.

 

이것이 흔히 알고있는 print와 println(줄바꿈)의 차이이다.

 

 

2. print()

    //파라미터가 char인 print()
    public void print(char c) {
        write(String.valueOf(c));
    }

    //파라미터가 int인 print()    
    public void print(int i) {
        write(String.valueOf(i));
    }

    // 그 외 여러 오버로딩 된 print()
    .
    .
    .

 print()는 write()를 호출한다. (줄바꿈은 없다)

 

이 때 파라미터는 String클래스의 valueOf()의 리턴 값이다.

 

 

3. valueOf()

	//파라미터가 long인 valueOf()
	public static String valueOf(long l) {
        	return Long.toString(l);
        }

        //그 외 여러 오버로딩 된 valueOf()
        . 
        .
        .

valueOf()는 들어온 파라미터의(위 코드에서는 long)

데이터 타입 클래스(Long)에서 오버라이딩한

toString()을 호출해주는 녀석이었다. 

 

==> 결과적으로

println는 print를,

print는 valueOf를,

valueOf는 toString을 호출하는구나. 

 

그래서 println()을 할 때 toString()을 생략해도 되는 거구나!?