Java

빌더 어노테이션(@Builder)

갤러리스트 2024. 11. 4. 20:26

@Builder 란

  • 객체 생성 방식을 유연하게 하기 위한 어노테이션
  • 객체 생성 시 빌더 패턴 적용 가능

주요 기능

  • 유연한 객체 생성
    • 필요한 필드만 선택적으로 설정할 수 있음
  • 불변성 유지
    • 객체를 생성하기 전에 먼저 필요한 필드를 모두 설정
    • 이후, 객체를 생성하므로 불변성 유지

 

 

생성자에 사용 VS 클래스 자체에 사용

생성자에 @Builder를 사용하는 방식

  • 선택적 빌더 패턴 적용
    • 특정 생성자에만 빌더 패턴을 적용할 수 있음
  • 필요한 경우에만 빌더 패턴 사용 가능
  • 기본값이 필요한 필드는 매개변수를 통해 설정해야함
  • 빌더 패턴을 사용하기 위해 추가 생성자를 생성해야함
  • 여러 생성자가 있거나 특정 생성자만 빌더 패턴으로 생성하고 싶을 때
import lombok.Builder;

public class Car {
    private String model;
    private String color;
    private int year;

    @Builder
    public Car(String model, String color, int year) {
        this.model = model;
        this.color = color;
        this.year = year;
    }
}

Car car = Car.builder()
             .model("Tesla")
             .color("Red")
             .year(2023)
             .build();

클래스 자체에 @Builder를 사용하는 방식

  • 클래스 전체 빌더 패턴 적용
    • User.builder()로 객체 생성 가능
    • @Builder.Default 로 필드의 기본값 설정 가능
    • 특정 필드만 빌더 패턴으로 생성하고 싶어도 모든 필드를 빌더 패턴으로 생성해야함
  • 필드가 많거나 기본값 설정이 필요할 때
@Builder
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int seq;
    
    private String username;
    private String password;

    @Builder.Default
    private int points = 0;

    @Builder.Default
    private LocalDateTime signupDate = LocalDateTime.now();

    private LocalDateTime withdrawalDate;
    private String phoneNumber;
}

 

추가 어노테이션

@AllArgsConstructor

  • 모든 필드를 포함하는 생성자를 자동 생성
  • 빌더 패턴을 사용해 객체를 생성할 때 모든 필드를 초기화

@NoArgsConstructor

  • 매개변수가 없는 기본 생성자를 자동으로 생성
  • force=true 를 사용하면 final 필드에도 기본값 설정 가능

@Builder.Default

  • 기본값을 설정할 수 있게 해줌
  • 특정 필드에 기본값 설정

참고

Lombok @Builder의 동작 원리