아래 코드를 보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 |
@Data
@Builder
public class Event {
private Integer id;
private String name;
private String description;
private LocalDateTime beginEnrollmentDateTime;
private LocalDateTime closeEnrollmentDateTime;
private LocalDateTime beginEventDateTime;
private LocalDateTime endEventDateTime;
private String location; // location 값이 없다면 온라인 모임
private int basePrice; // optional
private int maxPrice; // optional
private int limitOfEnrollment;
private boolean offline;
private boolean free;
private EventStatus eventStatus;
}
|
cs |
@Builder 라는 애너테이션이 있다.
자바의 빌더 패턴을 스프링에서 사용하기 쉽게 만들어준다.
위의 코드에 작성된 Event 클래스의 객체를 생성하려면 아래처럼 코드를 작성하면 된다.
1
2
3
4
5
6
7
8
9
10 |
public class EventTest {
public void createEvent(){
Event event = new Event();
event.setLimitOfEnrollment(20);
event.setLocation("34123");
}
} |
cs |
이렇게 작성하면 객체를 생성하고 setter 를 사용해서 객체의 속성 값을 채워 넣는다.
만약 객체의 모든 필드에 값을 넣을 수 있다면 생성자를 활용하기도 한다.
1
2
3
4
5
6 |
public Event(Integer id , ){
this.id = id;
.....
....
....
} |
cs |
이렇게 생성자를 만들어서 모든 값을 채워 넣을 것이다.
속성 값의 일부만 알고 있다면 아래 코드처럼 작성하게 될 것이다.
1
2
3
4
5
6
7 |
public void createEvent(){
Event event = new Event();
event.setLimitOfEnrollment(20);
event.setLocation("34123");
}
|
cs |
이렇게 작성하면 setter 부분이 속성 개수만큼 길어지게 된다.
빌더 패턴을 사용하면 코드를 그렇게 작성하지 않아도 된다.
빌더 패턴을 사용하면 아래와 같이 코드를 작성할 수 있다.
1
2
3
4
5
6
7
8
9 |
public class EventTest {
public void builder(){
Event event = Event.builder().description("20").location("123123").build();
}
}
|
cs |
이렇게하면 description 의 값이 20이고 location 이 123123인 Event 객체가 생성된다.
builder() 메소드를 정의한 적 없지만 @Builder 애너테이션을 붙임으로써 이렇게 코드를 작성 할 수 있다.
원래 자바에서는 아래처럼 작성한다. EventBuilder 클래스를 따로 작성해서 빌더 패턴을 구현한다.
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 |
public class EventBuilder {
private Integer id;
private String name;
private String description;
private LocalDateTime beginEnrollmentDateTime;
private LocalDateTime closeEnrollmentDateTime;
private LocalDateTime beginEventDateTime;
private LocalDateTime endEventDateTime;
private String location; // location 값이 없다면 온라인 모임
private int basePrice; // optional
private int maxPrice; // optional
private int limitOfEnrollment;
private boolean offline;
private boolean free;
private EventStatus eventStatus;
public EventBuilder setId(Integer id) {
this.id = id;
return this;
}
public EventBuilder setName(String name) {
this.name = name;
return this;
}
public EventBuilder setDescription(String description) {
this.description = description;
return this;
}
public EventBuilder setbeginEnrollmentDateTime(LocalDateTime beginEnrollmentDateTime) {
this.beginEnrollmentDateTime = beginEnrollmentDateTime;
return this;
}
public EventBuilder setCloseEnrollmentDateTime(LocalDateTime closeEnrollmentDateTime) {
this.closeEnrollmentDateTime = closeEnrollmentDateTime;
return this;
}
....
....
....
public Event build(){
Event event = new PersonInfo(name, age, favoriteColor, favoriteAnimal, favoriteNumber);
return event;
}
} |
cs |
이렇게 직접 구현한 경우에는 아래 코드처럼 사용한다.
1
2
3
4
5
6
7
8
9
10 |
public class BuilderPattern {
public static void main(String[] args) {
EventBuilder eventBuilder = new EventBuilder();// 빌더 객체를 생성합니다.
Event event = eventBuilder // 빌더 객체에 데이터를 담습니다. 순서는 상관없습니다.
.setLocation("MISTAKE")
.setId(20)
.build();
}
} |
cs |
빌더 패턴에 대해서 알아봤습니다.
스프링 애너테이션들을 사용하면 스트래티지 패턴 , 싱글턴 , 빌더 패턴들을 쉽게 사용할 수 있는 것 같습니다.
이런 기능들은 정말 편리하지만 개발능력을 키우려면 이렇게 직접 해보는 경험이 필요하겠단 생각이 드네요.
'Java 강의' 카테고리의 다른 글
Java로 웹 크롤링 하기 (0) | 2017.11.03 |
---|---|
자바 이벤트 객체 (0) | 2017.11.01 |
자바 GUI 이벤트 / java gui event (0) | 2017.10.31 |
객체 직렬화 하고 다시 가져오기 / java Serializable (0) | 2017.10.27 |
자바 스레드 레이스 컨디션 예제 / java thread race condition example (0) | 2017.10.25 |
댓글