예지의 테크 로그포스 (Yeji's Tech Log Force)
Java에서 출력할 때 toString()을 생략해도 되는 이유 본문
많은 사람들이 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()을 생략해도 되는 거구나!?
'Java' 카테고리의 다른 글
System.out.println()으로 Java의 많은 것을 설명해보자! (0) | 2024.01.28 |
---|---|
Object 클래스의 equals메서드 (feat. Casting Reference Types) (0) | 2024.01.20 |
Java 모든 Class는 Object Class를 상속 받는다(feat. 오버라이딩) (0) | 2024.01.19 |
Garbage collection을 고려한 코드 작성 (1) | 2024.01.19 |
static 메서드 호출 시 주의점 (0) | 2024.01.19 |
Comments