728x90
반응형
4. toString()
해당 객체의 문자열 표현을 리턴한다.
JVM 뜯어보기
Object.toString() 메서드는 해당 객체를 출력할 때 호출되는 메서드다. 앞선 getClass글에서도 언급됐지만 출력을 담당하는 PrintStream의 print()나 println() 메서드는 String.valueOf() 메서드를 호출하고 다시 valueOf() 메서드는 객체에 toString() 메서드를 호출한 결과를 출력한다. 따라서 객체를 출력한 결과를 바꾸기 위해서는 해당 클래스의 toString() 메서드를 오버라이딩해주면 된다. 해당 코드를 보자.
// src/java.base/java/lang/Object.java
public class Object {
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
}
Object클래스의 toString() 메서드를 보면 객체에 getClass() 메서드를 호출해 해당 객체의 'Class' 객체를 얻고 다시 getName() 메서드를 호출해 클래스의 이름만을 얻는다. 그리고 "@"를 붙이고 뒤에는 해시코드를 16진수로 변환한 값을 붙여서 돌려준다.
사용해보기
public class Person {
int id;
public Person(int id) {
this.id = id;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
'}';
}
}
public class Main {
public static void main(String[] args) {
Person person_1 = new Person(988515);
System.out.println(person_1);
}
}
Person{id=988515}
Person 클래스에서 toString() 메서드를 오버라이딩해 출력했을 때 클래스 이름과 해당 id값을 출력하도록 수정했다. 결과와 같이 인스턴스를 출력했을 때 예상되는 결과가 출력됐다. 이처럼 일반적인 출력 결과인 '클래스 이름@16진수 해시코드' 형태로 출력하고 싶지 않다면 toString() 메서드를 오버라이딩해 적절하게 수정해 사용하면 된다.
반응형
'프로그래밍 > Java' 카테고리의 다른 글
[Java] JDK 부수기 - (2) java.lang.System - 2. arraycopy (0) | 2023.11.24 |
---|---|
[Java] JDK 부수기 - (2) java.lang.System - 1. err, in, out (0) | 2023.11.23 |
[Java] JDK 부수기 - (1) java.lang.Object - 4. getClass (0) | 2023.11.21 |
[Java] JDK 부수기 - (1) java.lang.Object - 3. hashCode (0) | 2023.11.21 |
[Java] JDK 부수기 - (1) java.lang.Object - 2. equals (0) | 2023.11.20 |