[디자인 패턴] Builder 패턴

정태경·2023년 10월 9일
post-thumbnail

Builder 패턴

빌더 패턴은 객체 생성에 관련된 디자인 패턴 중 하나로, 복잡한 객체를 생성하는 과정을 단순화하고 유연하게 만들어주는 패턴이다. 이 패턴을 사용하면 객체 생성 과정을 단계적으로 진행하며, 각 단계를 컨트롤할 수 있다.

커피 객체를 생성한다고 보자. 이 커피 객체는 다양한 속성을 가질 수 있다. 예를 들어, 커피 객체는 커피 종류, 양, 설탕의 양, 우유의 양 등의 속성을 가질 수 있다. 이런 속성들이 많아지면서 객체 생성 과정이 복잡해질 수 있는데, 이때 빌더 패턴을 사용하면 이러한 객체를 쉽게 생성할 수 있다.

예제 코드

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)  
profile
두나무 업비트 QA 엔지니어

0개의 댓글