[python] 빌더 디자인 패턴

빌더 디자인 패턴은 복잡한 객체를 생성하는 과정을 단순화하기 위한 패턴입니다. 객체 생성을 단계별로 분리하여 조립할 수 있도록 해줍니다. 이러한 방식은 객체의 생성 방법을 추상화하고 사용자가 복잡한 생성 과정을 신경 쓰지 않고도 객체를 만들 수 있도록 합니다.

빌더 디자인 패턴의 구성 요소

빌더 디자인 패턴은 보통 다음과 같은 구성 요소로 구성됩니다:

  1. Product (생성될 객체)
    • 빌더에 의해 생성되는 최종 객체, 복잡한 구조를 가질 수 있습니다.
  2. Abstract Builder (빌더 인터페이스)
    • 객체를 생성하기 위한 메서드를 정의하는 인터페이스입니다.
    • 다양한 Builder 클래스들을 구현할 때 사용됩니다.
  3. Concrete Builder (구체적인 빌더 클래스)
    • Abstract Builder 인터페이스를 구현하는 클래스입니다.
    • 객체 생성을 위한 실제 메서드들을 구현합니다.
  4. Director (객체 생성을 조율하는 클래스)
    • 실제로 객체를 생성하는 역할을 합니다.
    • 빌더 클래스를 사용하여 생성 과정을 조율합니다.

빌더 디자인 패턴의 예제 코드 (Python)

# Product
class Car:
    def __init__(self):
        self.engine = None
        self.wheels = None
        self.color = None
    
    def __str__(self):
        return f"Car with Engine: {self.engine}, Wheels: {self.wheels}, Color: {self.color}"

# Abstract Builder
class CarBuilder:
    def __init__(self):
        self.car = Car()
    
    def set_engine(self, engine):
        self.car.engine = engine
        
    def set_wheels(self, wheels):
        self.car.wheels = wheels
        
    def set_color(self, color):
        self.car.color = color

# Concrete Builder
class SportsCarBuilder(CarBuilder):
    def build_engine(self):
        self.set_engine("V8")
    
    def build_wheels(self):
        self.set_wheels("Sport wheels")
    
    def build_color(self):
        self.set_color("Red")

# Director
class CarManufacturer:
    def __init__(self, builder):
        self.builder = builder
    
    def construct_car(self):
        self.builder.build_engine()
        self.builder.build_wheels()
        self.builder.build_color()
        return self.builder.car

# Usage
builder = SportsCarBuilder()
manufacturer = CarManufacturer(builder)
car = manufacturer.construct_car()

print(car)

위의 예제 코드는 자동차를 빌더 디자인 패턴을 사용하여 생성하는 방법을 보여줍니다. Car, CarBuilder, SportsCarBuilder, CarManufacturer 클래스들을 사용하여 자동차 객체를 생성하고 조립합니다. 이를 통해 사용자는 자동차 객체를 생성하는 과정에 대해 신경 쓰지 않고도 원하는 자동차를 손쉽게 만들 수 있습니다.

참고 자료