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
- 기본값을 설정할 수 있게 해줌
- 특정 필드에 기본값 설정