Java: toString() 오버라이드

1
post-thumbnail

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

음! 예쁘게 잘 나온다!

0개의 댓글