SyntaxHighlighter.all(); @Builder, builder().build() :: 게을러지고 싶어 부지런한 개발자

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.*;
 
 
@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());
cs

 

만약 @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.*;
 
 
@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;
}
 
}
}
cs

 

여기다가 생성자와 게터 세터까지 추가하면 boilerplate 코드만 백줄이 넘는 것이다..

+ Recent posts