Java에서 문자열을 다루는 것은 아주아주 필수적이다.
toString()
메소드Java의 모든 클래스의 Super클래스인 Object
클래스에 정의되어 있다.
Object
클래스에 정의된 모든 메소드는, 당연하게도 다른 모든 클래스에서 사용 가능하다object
클래스의 객체에 toString()
메소드를 사용해보겠다.
/* 실행 클래스 */
public class OverrideToString {
public static void main(String[] args) {
ExampleClass ex = new ExampleClass("Voyager", "Explorer", 33);
System.out.println(ex.toString()); /* Object에 toString()메서드 사용 */
}
}
/* 임의의 클래스 */
ublic class ExampleClass {
public String firstName;
public String lastName;
public int age;
public ExampleClass(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}/* end constructor */
}
>> 실행결과
tostring.ExampleClass@5eb5c224
tostring.ExampleClass@5eb5c224
요 놈의 뜻이 뭘까?
@를 기준으로 좌측은 클래스의 이름, 우측은 해시코드 값을 의미한다.
아하, Object.toString()
은 기본적으로 클래스의 이름과 해시코드를 출력해주는 메서드구나!
알겠다.
근데, 나는 toString()
메서드를 통해 클래스의 이름과 해시코드 값을 출력하고 싶은 게 아니다.
나는 ‘객체에 toString()
메서드를 사용했을 때 필드의 내용을 출력하기’를 원한다.
해시코드랑 클래스 이름 말고, '객체가 가지고 있는 내용' 말이다.
이런 경우에 toString()
을 재정의한다. (@Override)
public class ExampleClass {
public String firstName;
public String lastName;
public int age;
public ExampleClass(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
/* Override */
@Override
public String toString() {
return "first name is: "+this.firstName+
"\n"+"last name is: "+this.lastName+
"\n"+"age is: "+this.age;
}
}
>> 실행결과
first name is: Voyager
last name is: Explorer
age is: 33
음! 예쁘게 잘 나온다!