DEV/Java

[Java][lombok] @ToString에 대한 이해와 적용

Bi3a 2023. 11. 14. 00:19

728x90

Java 롬복 라이브러리의 @ToString에 대해 알아봅시다.
java 기초 깨부시기

 

@ToString

Sysout 등 toString()이 필요한 메서드를 자동으로 적용시킵니다.
클래스 내의 필드 값을 String으로 리턴받을 때 유용합니다.
* 리턴 값 : 클래스명(클래스 필드 = 값, 클래스 필드 = 값... )

 

@ToString 미적용 시

@Setter
@RequiredArgsConstructor
class Parent {
    int generation;
    private final int age;
    private final String name;
}

출력 값

Parent parent = new Parent(1, "John");
parent.setGeneration(1);
System.out.println(parent);
// out : Parent@5fd0d5ae, 기본 주소 값을 출력

 

@ToString 적용 시 

@ToString
@Setter
@RequiredArgsConstructor
class Parent {
    int generation;
    private final int age;
    private final String name;
}

출력 값

Parent parent = new Parent(1, "John");
parent.setGeneration(1);
System.out.println(parent);
// out : Parent(generation=1, age=1, name=John)

 

@ToString의 부가 설정 기능

exclude

특정 필드를 toString에서 제외할 때 사용합니다.
@ToString(exclude = "generation")
@Setter
@RequiredArgsConstructor
class Parent {
    int generation;
    private final int age;
    private final String name;
}

출력 값

Parent parent = new Parent(1, "John");
parent.setGeneration(1);
System.out.println(parent);
// out : Parent(age=1, name=John)

 

of

특정 필드만을 toString에 포함할 때 사용합니다.
@ToString(of = {"generation", "age"})
@Setter
@RequiredArgsConstructor
class Parent {
    int generation;
    private final int age;
    private final String name;
}

출력 값

Parent parent = new Parent(1, "John");
parent.setGeneration(1);
System.out.println(parent);
// out : Parent(generation=1, age=1)

 

 

callSuper

true로 설정 시 부모 클래스의 toString 메소드로 호출합니다. 기본값은 false입니다.

CallSuper = false

@ToString(callSuper = false)
class Child extends Parent {

    public Child(int generation, int age, String name) {
        super(generation, age, name);
    }
}

출력 값

Child child = new Child(2, 12, "Johnson");
System.out.println(child);
// out : Child()

 

CallSuper = true

@ToString(callSuper = true)
class Child extends Parent {

    public Child(int generation, int age, String name) {
        super(generation, age, name);
    }
}

출력 값

Child child = new Child(2, 12, "Johnson");
System.out.println(child);
// out : Child(super=Parent(generation=2, age=12, name=Johnson))

 

includeFieldNames

true 로 설정 시 필드의 이름을 함께 출력합니다. 기본값은 true입니다.

includeFieldNames = false 

@ToString(includeFieldNames = false)
@Setter
@AllArgsConstructor
class Parent {
    int generation;
    private final int age;
    private final String name;
}

출력값

Parent parent = new Parent(1, 42, "John");
System.out.println(parent);
// out : Parent(1, 42, John)