
빌더 패턴은 객체 생성에 관련된 디자인 패턴 중 하나로, 복잡한 객체를 생성하는 과정을 단순화하고 유연하게 만들어주는 패턴이다. 이 패턴을 사용하면 객체 생성 과정을 단계적으로 진행하며, 각 단계를 컨트롤할 수 있다.
커피 객체를 생성한다고 보자. 이 커피 객체는 다양한 속성을 가질 수 있다. 예를 들어, 커피 객체는 커피 종류, 양, 설탕의 양, 우유의 양 등의 속성을 가질 수 있다. 이런 속성들이 많아지면서 객체 생성 과정이 복잡해질 수 있는데, 이때 빌더 패턴을 사용하면 이러한 객체를 쉽게 생성할 수 있다.
class Coffee:
def __init__(self):
self._type = None
self._amount = None
self._sugar = None
self._milk = None
def __str__(self):
return f"{self._type} 커피 {self._amount}잔, 설탕 {self._sugar}, 우유 {self._milk}"
class CoffeeBuilder:
def __init__(self):
self._coffee = Coffee()
def set_type(self, coffee_type):
self._coffee._type = coffee_type
def set_amount(self, amount):
self._coffee._amount = amount
def set_sugar(self, sugar):
self._coffee._sugar = sugar
def set_milk(self, milk):
self._coffee._milk = milk
def get_coffee(self):
return self._coffee
class Director:
def __init__(self, builder):
self._builder = builder
def make_coffee(self, coffee_type, amount, sugar, milk):
self._builder.set_type(coffee_type)
self._builder.set_amount(amount)
self._builder.set_sugar(sugar)
self._builder.set_milk(milk)
return self._builder.get_coffee()
builder = CoffeeBuilder()
director = Director(builder)
coffee1 = director.make_coffee("아메리카노", 2, "적당히", "적당히")
coffee2 = director.make_coffee("카페라떼", 1, "조금", "많이")
print(coffee1)
print(coffee2)