System.out.println & toString Method ( JAVA )
우리가 평상시 콘솔에 테스트 및 데이터를 띄워보기 위해서 많이쓰는 방법중 하나가 'System.out.println' 입니다.
하지만 대부분 System.out.println이 어떻게 동작하는지 알지 못하고 쓰는 사람들이 많습니다.
물론 중요한 내용은 아닙니다만 궁금한 사람이 있을 수 있기에 글을 남깁니다.
( 저도 궁금하여 파해쳐 보았습니다.. )
System.out.println은 System 클래스에서 작성되어진 함수로써 out(PrintStream)을 가지고 있고 PrintStream 클래스에서 println이 구현되어있습니다.
println 함수를 살펴보면 오버로딩으로 파라미터를 Object, String, char, double 등 다양하게 가져옵니다.
/** PrintStream 클래스의 println 구현부분의 일부분 입니다. */
/**
* Prints an array of characters and then terminate the line. This method
* behaves as though it invokes {@link #print(char[])} and
* then {@link #println()}.
*
* @param x an array of chars to print.
*/
public void println(char x[]) {
synchronized (this) {
print(x);
newLine();
}
}
/**
* Prints a String and then terminate the line. This method behaves as
* though it invokes {@link #print(String)} and then
* {@link #println()}.
*
* @param x The {@code String} to be printed.
*/
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
/**
* Prints an Object and then terminate the line. This method calls
* at first String.valueOf(x) to get the printed object's string value,
* then behaves as
* though it invokes {@link #print(String)} and then
* {@link #println()}.
*
* @param x The {@code Object} to be printed.
*/
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
이후 println 함수의 내부 코드인 print(s) 로 들어가게 되는데요 해당 함수는 println 함수와 동일하게 PrintStream에 구현되어있고 println도 오버로딩으로 각각의 파라미터를 받아서 처리합니다.
/** println 예시입니다. */
public void print(long l) {
write(String.valueOf(l));
}
public void print(float f) {
write(String.valueOf(f));
}
이처럼 각각의 데이터 타입들을 String으로 변환해 주는 과정을 거쳐서 콘솔에 표출되도록 구현되어있습니다.
하지만 위에 Object를 파라미터로 받는 println만 다르게 구현되어있는데요 여기에서 toString과 관련된것을 확인 할 수 있습니다.
Object를 파라미터로 받는 String.valueOf(x) 함수 구현 코드입니다.
/**
Object 데이터 타입의 valueOf 메소드
*/
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
/**
int 데이터 타입의 valueOf 메소드
*/
public static String valueOf(int i) {
return Integer.toString(i);
}
이처럼 Object는 obj.toString()을 사용하여 콘솔에 나타나도록 설계되어있어 우리가 System.out.println에 생성된 인스턴스를 넣을 시 toString 메소드가 나타나는것을 알 수 있습니다. 하여 우리가 클래스에 toString을 오버라이드하여 System.out.println에 아무것도 없이 인스턴스만 집어넣어도 toString이 출력되는것을 확인 할 수있습니다.
간단한 예시입니다.
public class Test {
private String test1 = "Hello World";
public void setTest1(String test1) {
this.test1 = test1;
}
public String getTest1() {
return test1;
}
@Override
public String toString() {
return "TEST : " + test1;
}
public static void main(String[] args) {
Test test = new Test();
System.out.println(test);
}
}
해당 main 메소드를 실행해보면
TEST : Hello World 결과가 나올것입니다.
'Programing > Java' 카테고리의 다른 글
명령 프롬프트(cmd, terminal) java & javac 차이점 (0) | 2022.08.15 |
---|---|
JNDI 작동원리 및 적용법 (0) | 2022.08.05 |
(Class)XPath 사용법 (0) | 2022.08.03 |
JVM 작동 원리 (0) | 2022.07.08 |
Instanceof ( 연산자 ) (0) | 2022.03.24 |