[python] 빌더 디자인 패턴
빌더 디자인 패턴은 복잡한 객체를 생성하는 과정을 단순화하기 위한 패턴입니다. 객체 생성을 단계별로 분리하여 조립할 수 있도록 해줍니다. 이러한 방식은 객체의 생성 방법을 추상화하고 사용자가 복잡한 생성 과정을 신경 쓰지 않고도 객체를 만들 수 있도록 합니다.
빌더 디자인 패턴의 구성 요소
빌더 디자인 패턴은 보통 다음과 같은 구성 요소로 구성됩니다:
- Product (생성될 객체)
- 빌더에 의해 생성되는 최종 객체, 복잡한 구조를 가질 수 있습니다.
- Abstract Builder (빌더 인터페이스)
- 객체를 생성하기 위한 메서드를 정의하는 인터페이스입니다.
- 다양한 Builder 클래스들을 구현할 때 사용됩니다.
- Concrete Builder (구체적인 빌더 클래스)
- Abstract Builder 인터페이스를 구현하는 클래스입니다.
- 객체 생성을 위한 실제 메서드들을 구현합니다.
- 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
클래스들을 사용하여 자동차 객체를 생성하고 조립합니다. 이를 통해 사용자는 자동차 객체를 생성하는 과정에 대해 신경 쓰지 않고도 원하는 자동차를 손쉽게 만들 수 있습니다.
참고 자료
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides