Builder Pattern
Builder Pattern이란?
- 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴
- 생성자의 매개변수가 많은 경우 불필요한 매개변수까지 값을 채워 호출해야 하는 문제를 해결 할 수있다.
- 빌더 단계들에 대한 일련의 호출을 디렉터라는 별도의 클래스로 추출하여 관리할 수 있다.
Builder 패턴의 이점
- 아래와 같은 점층적 생성자를 빌더 패턴을 사용하면 제거할 수 있다.
class Pizza {
Pizza(int size) { ... }
Pizza(int size, boolean cheese) { ... }
Pizza(int size, boolean cheese, boolean pepperoni) { ... }
// …
- 객체들을 단계별로 생성하거나 생성 단계들을 연기하거나 재귀적으로 단계들을 실행할 수 있다.
- SRP에 위배되지 않음, 제품의 비즈니스 로직에서 생성코드를 고립시킬 수 있다.
- 객체의 생성 시 같은 생성 코드를 재사용할 수 있습니다.
Builder example
- lombok에서 제공하는 @Builder 어노테이션을 통해 간단히 빌더 클래스를 생성할 수 있다.
@Getter
@NoArgsConstructor
@Entity
public class Post extends BaseEntity {
String subject;
String content;
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
Member writer;
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "board_id")
Board board;
@Builder // 빌더 클래스 생성
public Post(String subject, String content, Member writer,Board board) {
this.subject = subject;
this.content = content;
this.writer = writer;
this.board = board;
}
}
- ex) 빌터 클래스를 적용하고 객체를 생성하는 경우
public void writePost(Member member, PostRequest postRequest) {
Optional<Board> board = boardRepository.findById(postRequest.getBoardId());
Post post = new Post(postRequest.getSubject(),postRequest.getContent(),member,board.orElse(new Board()));
postRepository.save(post);
}
- ex) 빌더 클래스를 적용하는 경우
public void writePost(Member member, PostRequest postRequest) {
Optional<Board> board = boardRepository.findById(postRequest.getBoardId());
Post post = Post.builder()
.subject(postRequest.getSubject())
.content(postRequest.getContent())
.writer(member)
.board(board.orElse(new Board())).build();
postRepository.save(post);
}
references
[Java] 빌더 패턴(Builder Pattern)을 사용해야 하는 이유
[Java] 빌더 패턴(Builder Pattern)을 사용해야 하는 이유
객체를 생성하기 위해서는 생성자 패턴, 정적 메소드 패턴, 수정자 패턴, 빌더 패턴 등을 사용할 수 있습니다. 개인적으로 객체를 생성할 때에는 반드시 빌더 패턴을 사용해야 한다고 생각하는
mangkyu.tistory.com
빌더 패턴
/ 디자인 패턴들 / 생성 패턴 빌더 패턴 다음 이름으로도 불립니다: Builder 의도 빌더는 복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴입니다. 이 패턴을 사용하면 같은 제작
refactoring.guru
'Design Pattern' 카테고리의 다른 글
[Design Pattern] Prototype Pattern (0) | 2024.03.18 |
---|---|
[Design Pattern] Abstract Factory (0) | 2024.03.17 |
[Design Pattern] Factory Method Pattern (0) | 2024.03.16 |
[Design Pattern] Singleton Pattern (0) | 2024.03.14 |
[Design Pattern] 디자인 패턴과 종류 (0) | 2024.03.13 |