Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ExpansionTile
- 다트
- 플러터
- dart
- 개발
- freezeD
- 파이썬
- 리눅스
- 유데미 코리아
- 디자인패턴
- 개발자
- 맥
- riverpod
- 도서
- ListTile
- 책
- flutter
- 가상환경
- vscode
- python
- 리버팟
- linux
- 명령어
- copyWIth
- Code Generation
- 코딩
- 프로그래밍
- 유데미
- command
- 유데미 러닝크루
Archives
- Today
- Total
승상의 코딩 블로그
디자인 패턴 - 빌더 패턴(Builder Pattern) with 파이썬(python) 본문
2023.05.29 - [Python (파이썬)] - 디자인 패턴 - 팩토리 패턴(Factory Pattern) with 파이썬(python)
이 팩토리 패턴의 예시를 다르게 생각해봅시다.
커피를 생성하는 팩토리 패턴을 간단히 만들어 보겠습니다.
class Coffee:
def __init__(self, additive):
self.additive = additive
class CoffeeFactory:
def createLatte(self):
additive = ['steamed milk', 'milk form']
return Coffee(additive)
def createVanillaLatte(self):
additive = ['steamed milk', 'vanilla syrup']
return Coffe(additive)
coffeeFactory = CoffeeFactory()
coffeeFactory.createLatte()
coffeeFactory.createVanillaLatte()
우리가 원하는 제품이 있다면, 원하는 제품을 생성하는 함수(ex. Latte, VanillaLatte)를 CoffeFactory 에서 호출하면 됩니다.
Factory 에서 만드는 제품이 간단한 제품이 아닐뿐 아니라, 그 제품의 양이 많아질 수록 문제가 생깁니다.
왜냐하면, 생성하는 제품에 대한 제어가 어렵기 때문입니다.
이 코드를 빌더 패턴을 활용해서 수정해보도록 하겠습니다.
class Coffee:
def __init__(self, additive):
self.steamedMilk = None
self.milkForm = None
self.vanillaSyrup = None
self.espresso = None
def setSteamedMilk(self, steamedMilkType):
self.steamedMilk = steamedMilkType
def setMilkForm(self, milkFormType):
self.milkForm = milkFormType
def setVanillaSyrup(self, vanillaSyrupType):
self.vanillaSyrup = vanillaSyrupType
class CoffeeBuilder:
def __init__(self):
self.coffee = Coffee()
def addSteamedMilk(self, steamedMilkType):
self.coffee.setSteamedMilk(steamedMilkType)
return self
def addMilkFormType(self, milkFormType):
self.coffee.setMilkFormType(milkFormType)
return self
def addVanillaSyrup(self, vanillaSyrupType):
self.coffee.setVanillaSyrup(vanillaSyrupType)
return self
def build(self):
# 최종 반환
return self.coffee
# coffeeFactory.createLatte() 이전 Factory 패턴으로 만든 라떼가 아래로 바뀜
coffeeBuilder = CoffeeBuilder()\
.addSteamedMilk('Seoul Milk')\
.addVanillaSyrup('Sugar Free')\
.build()
- Coffee 클래스에 내부의 파라미터(재료)를 설정하는 함수를 정의해 줍니다.
Coffee 클래스는 직접적으로 생성되지 않고, CoffeeBuilder 클래스에 의해 생성됩니다. - CoffeeBuiler 에는 Coffee 클래스의 내부 파라미터를 설정하는 함수를 추가해주고, self(CoffeeBuiler) 를 반환해줍니다.
- 최종적으로 원하는 것은 Coffee 클래스이므로 build 함수를 통해 Coffee 를 반환할 수 있게 합니다.
이제, 새로운 재료가 추가되면, 새로운 재료를 추가만 해주면 됩니다!
조금 더 와 닿게 하기 위해, 스타벅스 어플을 예시로 소개해드립니다.
아이스 자몽 허니 블랙티를 주문할 때, 퍼스널 옵션을 통해 재료 하나하나를 커스터마이징할 수 있습니다. (빌더 패턴)
만약 완성된 제품만을 바로 주문하게 한다면, 좌측 이미지의 메뉴 창의 메뉴가 엄청나게 많아질 것입니다.
ex. 얼음 적은 아이스 자몽 허니 블랙 티, 시럽 한번 추가한 아이스 자몽 허니 블랙 티
사용자가 제어하는 부분이 많아질수록 사용자는 많이 불편하게 느낄 수 있지만, 그에 따라 인터페이스가 간단해질 수도 있는 경우에 대해서 살펴봤습니다.
상황에 따라 같은 말이라도 의미나 영향이 달라질 수 있다는 것을 잊지 마세요!
반응형
'Python (파이썬)' 카테고리의 다른 글
디자인 패턴 - 어댑터 패턴(Adapter Pattern) with 파이썬(python) (0) | 2023.07.14 |
---|---|
디자인 패턴 - 퍼사드 패턴(Facade Pattern) with 파이썬(python) (0) | 2023.07.10 |
파이썬 - sqlite3 라이브러리 (0) | 2023.06.01 |
파이썬 - staticmethod (0) | 2023.05.29 |
디자인 패턴 - 팩토리 패턴(Factory Pattern) with 파이썬(python) (2) | 2023.05.29 |
Comments