클래스 단위의 @Builder
- 특징
- 클래스 레벨에 @Builder를 선언하면 모든 필드를 포함하는 빌더를 생성한다.
- 별도의 생성자 정의가 필요하지 않는다. (Lombok이 기본 생성자를 자동으로 생성하기 때문이다.)
- 모든 필드가 선택적으로 초기화될 수 있다.
- 장점
- 객체 생성 시 필요한 필드를 유연하게 선택할 수 있다.
- 단점
- 필수 필드와 선택적 필드 구분이 명확하지 않아 실수로 일부 필드를 설정하지 않을 가능성이 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class User {
private String name;
private String email;
private int age;
}
// 객체 생성 예시
User user = User.builder()
.name("John Doe")
.email("john.doe@example.com")
.age(30)
.build();
모든 필드가 선택적으로 포함
생성자 단위의 @Builder
- 특징
- 특정 생성자에 @Builder를 선언하면 해당 생성자에 필요한 필드만 포함된 빌더를 생성한다.
- 필수 필드와 선택적 필드를 명확히 구분할 수 있다.
- 별도의 생성자 정의가 필요하다. 예를 들어, @AllArgsConstructor, @NoArgsConstructor 또는 사용자 정의 생성자를 선언해야 한다.
- 장점
- 객체 생성 시 필수 필드가 누락되지 않도록 강제할 수 있다.
- 유연한 객체 생성 방식을 제공한다.
- 단점
- 개발자가 명시적으로 생성자를 정의해야 하므로 관리가 약간 복잡할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import lombok.Builder;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
@ToString
public class User {
private String name;
private String email;
private int age;
@Builder
public User(String name, String email) {
this.name = name;
this.email = email;
// age는 선택적 필드로 남김
}
}
// 객체 생성 예시
User user = User.builder()
.name("John Doe")
.email("john.doe@example.com")
.build();
name과 email은 필수, age는 선택적 필드로 설정 가능