Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) toString() 메서드를 재정의해야 하는 이유와 활용법

자바(Java)에서 toString() 메서드는 어떤 용도로 사용될까요?

클래스의 객체를 문자열(String) 형태로 표현하고 싶을 때 toString() 메서드를 사용하면 됩니다. 이 메서드는 객체에 대한 텍스트 표현(textual representation)을 반환하는 역할을 합니다.

객체를 출력할 때 자바 컴파일러는 기본적으로 해당 객체의 toString() 메서드를 호출합니다. 따라서 이 메서드를 재정의(오버라이딩)하면, 단순한 내부 참조 값 대신 의미 있는 정보를 담은 출력 결과를 제공할 수 있습니다.

다음 예제를 통해 이 개념을 자세히 살펴보겠습니다.

toString() 메서드 재정의하기

package io.devqa.tutorials;

public class ToStringExample {

    private String firstName;
    private String lastName;
    private String email;

    public ToStringExample() {

    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("First name : ").append(this.firstName).append("\n");
        sb.append("Last name : ").append(this.lastName).append("\n");
        sb.append("Email : ").append(this.email).append("\n");
        return sb.toString();
    }

    public static void main(String args[]) {
        ToStringExample example = new ToStringExample();
        example.setFirstName("Testing");
        example.setLastName("Tester");
        example.setEmail("testing@tester.com");

        System.out.println(example);
    }
}

toString() 메서드를 재정의한 후 위 코드를 실행하면 다음과 같이 객체의 필드 값을 사람이 읽기 쉬운 형태로 확인할 수 있습니다.

First name : Testing
Last name : Tester
Email : testing@tester.com

반면, toString() 메서드를 재정의하지 않으면 출력 결과는 아래와 같습니다.

io.devqa.tutorials.ToStringExample@60e53b93

재정의하지 않은 경우에는 클래스 이름과 해시코드로 구성된 패키지명.클래스명@16진수 해시값 형태가 출력되어 객체의 실제 내용을 전혀 알 수 없습니다.

이처럼 toString() 메서드를 적절히 재정의하면 디버깅 시 객체 상태를 빠르게 파악할 수 있고, 로깅(log) 작업에서도 유용하게 활용할 수 있습니다. 또한 StringBuilder를 사용하면 문자열 연결 작업의 성능도 효율적으로 관리할 수 있습니다.