[개발이야기 #04] toString() 메서드

nyoung·2023년 4월 6일
2

개발이야기

목록 보기
4/9
post-thumbnail

최근 과제나 다른 공부를 하느라 velog 업로드가 뜸했다. 글을 작성하면서 스스로 복습도 되고 공부도 되는 시간이었는데, 반성반성..
오늘은 모든 클래스의 최상위 클래스인 object 클래스의 toString 메서드에 대해서 정리해보려고 한다.


toString()

객체의 정보를 String 즉, 문자열 값으로 바꾸어서 사용할때 쓰인다.
모든 클래스는 Object 클래스에서 상속받고, Object 클래스의 메서드 중 일부는 재정의해서 사용할 수 있는데, String이나 Integer 클래스는 이미 재정의 되어 있다.
toString() 메서드는 호출하지 않아도 자동으로 호출된다.

toString() 메서드를 재정의(Override) 해보자.

class Book{
	private String title;
    private String author;
    
    public Book(String title, String author) {
		this.title = title;
        this.author = author;
    }
}    
public class BookTest{
	public static void main(String[] args) {
    	Book book = new Book("데미안", "헤르만 헤세");
        System.out.println(book); //출력값은 book인스턴스의 주소값이 나온다.
    }
}

Book 타입을 변환하는 book을 출력하면 주소값이 나온다.
그렇다면 String 타입을 출력할때는 어떨가?

public class BookTest{
	public static void main(String[] args) {
    	String str = new String("string test");
        System.out.println(str.toString()); //출력값은 string test가 나온다.
    }
}

book 과 str 변수 모두 문자열을 넣어주었는데, book은 주소값을 출력하고 str은 toString 메서드를 호출하여 문자열을 출력한다.
이유는 맨 처음에 언급하였던 String과 Integer은 이미 재정의 되어있어서 toString 메서드를 바로 호출할 수 있다.
book을 출력하였을때 결과가 우리가 입력하였던 책이름과 저자명으로 나오도록 toString() 메서드를 재정의하면서 다시 비교해보자면

class Book{
	private String title;
    private String author;
    
    public Vook(String title, String author) {
		this.title = title;
        this.author = author;
    }
    
    //toString() 메서드 재정의
    public String toString() {
    	return title + "," + author;
    }
}    

Book 클래스에서 toString을 오버라이딩하여 호출하였을때 책이름과 저자명이 나오도록 재정의해준다.

public class BookTest{
	public static void main(String[] args) {
    	Book book = new Book("데미안", "헤르만 헤세");
        System.out.println(book.toString()); //출력값은 데미안, 헤르만 헤세 로 된다.
    }
}

toString 메서드를 호출하였을때 출력값이 바뀌는 것을 볼 수가 있다.
String 과 Integer 클래스는 이미 재정의 되어서 우리가 따로 오버라이딩 해주지 않아도 출력값이 각각 문자열과 정수로 나오는것이다.


toString() 메서드는 자동으로 호출된다.
앞에서 toString() 메서드를 사용할때 변수 뒤에 메서드를 직접 호출하였었는데, toString() 메서드는 자동으로 호출되기 때문에 생략가능하다.
우선 String 코드를 보자면

public class BookTest{
	public static void main(String[] args) {
    	String str = new String("string test");
        System.out.println(str.toString()); //출력값은 string test가 나온다.
        System.out.println(str);            //출력값은 똑같이 string test가 나온다.
    }
}

뒤에 toString() 메서드를 호출하지 않아도 똑같은 결과가 출력되는것을 볼 수 있다.
Book 클래스에서도

public class BookTest{
	public static void main(String[] args) {
    	Book book = new Book("데미안", "헤르만 헤세");
        System.out.println(book.toString()); //출력값은 데미안, 헤르만 헤세 로 된다.
        System.out.println(book);            //출력값은 데미안, 헤르만 헤세 로 된다.
    }
}

같은 결과가 나옴을 확인할 수 있다.


이렇게 toString() 메서드는 오버라이딩을 통해 재정의만 한다면 무궁무진하게 쓰일 수 있다.
자주 쓰이는 메서드라고 하니 이해하고 외우면 좋을 것 같다.

profile
새싹 개발자

0개의 댓글