Builder
개발하면서 가장 귀찮은 것 중에 하나다 Builder를 만드는 것이다. 이것은 자바 모델과도 거의 비슷한것이 반복된 내용만 가득하고.. 사용하는건 정말 편하고 좋은데 Builder자체를 만드는것은 귀찮은 일이다. Lombok 어노테이션을 사용하면 Builder도 자동으로 만들 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package myFirstGradleProject;
import lombok.*;
import java.util.Date;
@RequiredArgsConstructor
@Getter @Setter
@Builder
public class Customer {
@NonNull private String name;
private Integer age;
@NonNull private Date dateOfBirth;
private String gender;
private Integer height;
}
|
이제 Builder를 사용해 오브젝트를 생성 해 보자.
1
2
3
4
5
6
7
8
|
Customer c = Customer.builder()
.name("f.softwareengineer")
.age(78)
.dateOfBirth(new Date())
.gender("female")
.height(188)
.build();
System.out.println(c.getName());
|
만약 @Builder 어노테이션이 없었다면 코드의 양은 이렇다.
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package myFirstGradleProject;
import lombok.*;
import java.util.Date;
@RequiredArgsConstructor
@Getter @Setter
public class Customer {
@NonNull private String name;
private Integer age;
@NonNull private Date dateOfBirth;
private String gender;
private Integer height;
public static class builder {
private String name;
private Integer age;
private Date dateOfBirth;
private String gender;
private Integer height;
public builder() {
}
public builder name(String name) {
this.name = name;
return this;
}
public builder age(Integer age) {
this.age = age;
return this;
}
public builder dateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
return this;
}
public builder gender(String gender) {
this.gender = gender;
return this;
}
public builder height(Integer height) {
this.height = height;
return this;
}
public Customer build() {
Customer c = new Customer(this.name, this.dateOfBirth);
c.age = this.age;
c.gender = this.gender;
c.height = this.height;
return c;
}
}
}
|
여기다가 생성자와 게터 세터까지 추가하면 boilerplate 코드만 백줄이 넘는 것이다..
'Spring' 카테고리의 다른 글
[스프링] redirect 시 param(파라미터)값 넘기기 (0) | 2020.11.18 |
---|---|
스프링 엑셀 다운로드 (0) | 2020.11.12 |
스프링MVC - Form 데이터 받기 (0) | 2019.02.05 |
스프링MVC - 클래스와 메소드에 @RequestMapping 적용 (0) | 2019.02.05 |
스프링MVC - Controller에서 View로 데이터 전달 (0) | 2019.02.05 |