🍀 Spring Boot

[Spring] Lombok의 @Builder와 @SuperBuilder

dmaolon 2023. 6. 19. 17:57

들어가며

Lombok 라이브러리 중 @Builder와 @SuperBuilder 어노테이션을 사용하면, 객체의 생성 과정을 구현하는 것에 있어서 큰 도움을 받을 수 있습니다.

이 포스팅에서는 두 어노테이션의 특징과 사용법, 그리고 언제 어떤 것을 선택하면 좋을 지에 대해 다루고 있습니다.


❏ @Builder란?

@Builder는 Lombok에서 제공하는 어노테이션으로, 빌더 패턴을 자동으로 구현해줍니다. 따라서, 편리하게 빌더 패턴을 사용해줄 수 있는데요. 😆

 

사용 예시

@Getter
@Builder
public class Person {
    private String name;
    private int age;
}

// 객체 생성
Person person = Person.builder()
                .name("홍길동")
                .age(30)
                .build();

Person 클래스 위에 @Builder 어노테이션을 사용하고 있는 모습입니다.

객체 생성 시에 builder를 통해 각 필드에 값을 할당하며 사용합니다.

 

  • 어떤 필드에 어떤 값이 설정되는지 명확하게 볼 수 있습니다.
  • 필드의 순서에 관계없이 객체를 생성할 수 있습니다.
  • 객체 생성 후 내부 상태를 변경할 수가 없기에, 불변 객체를 쉽게 생성할 수 있습니다.

 

이렇게 편리한 @Builder이지만, 상속 관계인 경우에는 어떨까요??

아쉽게도 부모 클래스의 필드는 자식 클래스의 빌더에 포함될 수 없습니다.😢

 

그렇지만 우리에겐 @SuperBuiler가 있다!

 

❏ @SuperBuilder란?

@SuperBuilder는 @Builder의 확장 버전으로, 상속 관계에서도 빌더 패턴을 사용할 수 있도록 합니다.

 

사용 예시

@Getter
@SuperBuilder
public class Person {
    private String name;
    private int age;
}

@Getter
@SuperBuilder
public class Student extends Person {
    private int grade;
    private String school;
}

// 객체 생성
Student student = Student.builder()
                            .name("홍길동")
                            .age(30)
                            .grade(3)
                            .school("학교")
                            .build();

Student 클래스는 Person 클래스를 상속받고 있는 상태를 예시로 들고 와보았어요.

@SuperBuilder를 통해서 부모 클래스의 name, age도 설정할 수 있다는 점이 포인트입니다 ✨


 

이렇게 @Builder와 @SuperBuilder의 각 개념에 대해 예시와 함께 정리해보았습니다.

다음 포스팅으로는 @Builder 사용법에 대해 정리해보고자 합니다!

 

다음 글)

@Builder 사용법, @Builder.Default (feat. warning: @Builder.Default requires ~)

 

[Spring/Error] @Builder 사용법, @Builder.Default (feat. warning: @Builder.Default requires ~)

들어가며@Builder를 이용하면서, 빌더를 통해 생성되지 않는 필드의 값에는 자동적으로 Null이 담기게 됩니다. 따라서, 필드의 기본값을 설정해주면 좋을 것 같아서 찾아보니, @Builder.Default를 사용

dmaolon00.tistory.com

 

 

 

 

 

 

 

 

 

반응형