@Builder
@Builder
@Builder
Lombok이 제공 하는 어노테이션- 빌터 패턴 (Builder Pattern)을 자동으로 만들어주는 기능
Builder Pattern
- 복잡한 객체를 단계별로 (조립하듯이) 만들어주는 디자인 패턴
- 객체를 만들 때 만은 파라미터가 있거나 옵션이 많은 객체 깔끔하게 생성하기 위해 사용돼.
1
User user = new User(1L, "Jin", 34, "Seoul", true, null, ...);
생성자에 파라미터가 많으면
- 순서 외우기 힘듦
- 값이 어떤 의미인지 바로 안보임
- 선택적(optional) 옵션이 많으면 생성자 오버로드가 폭발함
빌터 패턴이 해결 하는 문제
- 파라미터 순서 기억할 필요 없음
1
2
3
4
5
6
7
User user = User.builder()
.name("Jin")
.age(34)
.address("Seoul")
.active(true)
.build();
- 어떤 값이 무엇인지 바로 보임
- 순서 상관 없음
필드 선택적으로 설정 가능 : 필요한 값만 넣고 나머지는 안 넣으면 됨.
가독성 매우 높음 : “조립하듯이” 만들기 때문에 명확함.
기존 생성자 방식
1
2
new User(id, name, age, address, isActive, email, gender, ...)
- 순서 안보임
- 필수/선택 옵션 구분 안됨
- 실수(파라미터 순서 오류) 확률 높음
빌터 패턴 방식
1
2
3
4
5
6
7
User.builder()
.id(1L)
.name("Jin")
.age(34)
.address("Seoul")
.build();
- 목적이 선명하고
- 누락되면 바로 눈에 보이고
- 생성자 오버로딩(수많은 생성자들)이 필요 없음
Lombok 없이 직접 만든다면 이렇게 생김 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class User {
private Long id;
private String name;
private int age;
public static class Builder {
private Long id;
private String name;
private int age;
public Builder id(Long id) {
this.id = id;
return this;
}
public Builder name(String name) {
this.name = name;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public User build() {
return new User(id, name, age);
}
}
private User(Long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
}
사용법 :
1
2
3
4
5
6
User user = new User.Builder()
.id(1L)
.name("Jin")
.age(34)
.build();
This post is licensed under CC BY 4.0 by the author.