반응형
정의
빌더 패턴(Builder Pattern)은 복잡한 객체의 생성 과정을 추상화하여 클라이언트가 단계적으로 객체를 생성할 수 있도록 하는 디자인 패턴입니다.
구조
목적
빌더 패턴의 주요 목적은 복잡한 객체의 생성 과정을 분리하여 객체 생성을 단순화하고 유연성을 제공하는 것입니다. 클라이언트는 단계적으로 객체를 생성할 수 있으며, 생성자에 많은 매개변수가 필요한 경우에도 가독성을 향상시킵니다.
사용을 고려해야 하는 경우
- 객체 생성 과정이 복잡하고 다양한 단계로 구성되어 있는 경우
- 여러 가지 속성 조합으로 객체를 생성해야 하는 경우
- 생성자에 많은 매개변수가 필요한 경우
사용하면 안되는 경우
- 객체 생성 과정이 단순하거나 속성이 매우 적은 경우
- 객체의 속성이 불변(Immutable)인 경우
- 생성자의 매개변수 수가 적은 경우
- 객체의 생성 과정이 정해져 있고, 변동이 거의 없는 경우
장점
- 객체 생성 과정을 단순화하고 가독성을 향상시킵니다.
- 객체의 구성 요소를 유연하게 조작하여 다양한 표현 결과를 얻을 수 있습니다.
- 객체 생성 코드와 객체 표현을 분리하여 유지 보수성을 개선합니다.
단점
- 객체 생성을 위해 추가적인 빌더 클래스가 필요하므로 코드가 늘어날 수 있습니다.
- 일부 개발자들은 복잡한 객체를 생성하기 위해 빌더 클래스를 작성하는 것이 번거로울 수 있습니다.
구현 단계
- Product 클래스 생성: 복잡한 객체를 표현하는 클래스를 정의합니다.
- Builder 인터페이스 생성: 객체 생성 과정을 추상화한 인터페이스를 정의합니다.
- ConcreteBuilder 클래스 생성: Builder 인터페이스를 구현하여 객체 생성 과정을 구체화합니다.
- Director 클래스 생성: 빌더를 사용하여 객체를 생성하는 클래스를 정의합니다.
- 클라이언트 코드에서 빌더를 활용하여 객체를 생성합니다.
예제
class Director {
private Builder builder;
public Director(Builder builder) {
this.builder =
builder;
}
public void construct() {
builder.buildPartA();
builder.buildPartB();
}
}
interface Builder {
void buildPartA();
void buildPartB();
Product getResult();
}
class ConcreteBuilder implements Builder {
private Product product;
public ConcreteBuilder() {
this.product = new Product();
}
public void buildPartA() {
product.setPartA("Part A");
}
public void buildPartB() {
product.setPartB("Part B");
}
public Product getResult() {
return product;
}
}
class Product {
private String partA;
private String partB;
public void setPartA(String partA) {
this.partA = partA;
}
public void setPartB(String partB) {
this.partB = partB;
}
public String toString() {
return "Product: " + partA + " + " + partB;
}
}
// Usage
public class Main {
public static void main(String[] args) {
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
director.construct();
Product product = builder.getResult();
System.out.println(product); // Output: Product: Part A + Part B
}
}
위의 예제에서는 Builder 패턴을 사용하여 Product 객체를 생성합니다. Director 클래스는 Builder 인터페이스를 사용하여 객체 생성 과정을 조작하고, ConcreteBuilder 클래스는 Builder 인터페이스를 구현하여 실제로 객체를 생성합니다. 클라이언트는 Director를 통해 객체 생성을 진행하고, 최종적으로 Product 객체를 얻을 수 있습니다.
반응형
'old > Programming' 카테고리의 다른 글
자바 프로그램의 실행 과정 (0) | 2023.07.15 |
---|---|
JAVA에서 char타입 사칙연산은 어떻게 작동할까? (0) | 2023.07.13 |
힙 자료구조란 (0) | 2023.07.05 |
Java 메소드 매개변수 참조 변경 불가: 왜 그럴까요? (0) | 2023.07.03 |
backtracking 알고리즘이란? (0) | 2023.07.02 |