728x90
반응형
빌더 패턴(Builder Pattern)
GoF 디자인 패턴 중 생성 패턴에 해당한다.
빌더 패턴은 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여, 동일한 절차에서도 서로 다른 표현을 생성하는 방법을 제공한다.
별도의 Builder 클래스를 만들어 필수 값에 대해서는 생성자를 통해, 선택적인 값들에 대해서는 메소드를 통해 step-by-step으로 값을 입력받은 후에 build() 메소드를 통해 최종적으로 하나의 인스턴스를 return하는 방식이다.
사용법
- 객체의 생성 알고리즘이 조립 방법에 독립적일 때
- 합성할 객체들의 표현이 서로 다르더라도 생성 절차에서 표현 과정을 지원해야할 때
구조

Builder
- 객체를 생성하는데 사용되는 인터페이스이다.
ConcreteBuilder
- Builder를 실제로 구현하여 객체를 생성까지 담당하는 클래스이다.
Director
- ConcreteBuilder를 파라미터로 받아 디테일한 객체를 생성하고 반환해주는 클래스이다.
장점
- 표현을 다양하게 변경할 수 있음
- 생성과 표현 코드를 분리함
- 복합 객체를 생성하는 절차를 세밀하게 나눌 수 있음
- 빌더 패턴은 객체를 생성할 때 생성자(Constructor)만 사용할 때 발생할 수 있는 문제를 개선하기 위해 고안됨
interface Builder {
setPartA(): void;
setPartB(): void;
setPartC(): void;
}
class Product {
private parts: string[] = [];
public add(part: string): void {
this.parts.push(part);
}
public listParts(): void {
console.log(`Product Parts: ${this.parts.join(", ")}`);
}
}
class ConcreteBuilder implements Builder {
private product!: Product;
constructor() {
this.reset();
}
public reset(): void {
this.product = new Product();
}
public setPartA(): void {
this.product.add("PartA");
}
public setPartB(): void {
this.product.add("PartB");
}
public setPartC(): void {
this.product.add("PartC");
}
public getProduct(): Product {
const result = this.product;
this.reset();
return result;
}
}
class Director {
private builder!: Builder;
public setBuilder(builder: Builder): void {
this.builder = builder;
}
public buildMinimumProduct(): void {
this.builder.setPartA();
}
public buildFullProduct(): void {
this.builder.setPartA();
this.builder.setPartB();
this.builder.setPartC();
}
}
const builder = new ConcreteBuilder();
const director = new Director();
director.setBuilder(builder);
director.buildMinimumProduct();
let minProduct = builder.getProduct();
console.log(minProduct);
director.buildFullProduct();
let fullProduct = builder.getProduct();
console.log(fullProduct);
참고할 사이트: https://www.youtube.com/watch?v=6eQtLxeGkDg&list=PLe6NQuuFBu7H3sFnErshsfgNPE9dOZZrx&index=21
728x90
반응형
'개발공부 일지 > 면접' 카테고리의 다른 글
| 추상 팩토리 패턴 ( Abstract Factory Pattern ) (0) | 2023.10.03 |
|---|---|
| 프록시 패턴(Proxy Pattern) (0) | 2023.10.03 |
| CORS는 무엇이고, CORS 에러를 방지하려면 어떻게 해야하나요? (0) | 2023.10.02 |
| 프로토타입 패턴(Prototype Pattern) (0) | 2023.10.02 |
| 싱글톤 패턴(Singleton Pattern) (0) | 2023.10.01 |
댓글