- Today
- Total
작심삼일
11주차. Builder 본문
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.
틀린 부분은 알려주시면 감사하겠습니다.
어떤 패턴인가
복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공할 수 있도록 합니다.
제품에 대한 내부 표현을 다양하게 변화할 수 있다.
생성과 표현에 필요한 코드를 분리한다.
복합 객체를 생성하는 절차를 좀더 세밀하게 나눌 수 있다.
어떻게 쓰는가
Builder: Product 객체의 일부 요소들을 생성하기 위한 추상적인 인터페이스를 정의
ConcreteBuilder: Builder 클래스에 정의된 인터페이스를 구현하며, 제품의 부품들을 모아 빌더를 복합
Director: Builder 인터페이스를 사용하는 객체를 합성
Product: 생성할 복합 객체를 표현
# Builder 사용
class Student:
def __init__(self, name):
self.name = name
def setAge(self, age):
self.age = age
def setNumber(self, number):
self.number = number
--------------------------------------------------------------
stud = Student('이름')
stud.setAge('24')
stud.setNumber('13')
# Builder 미사용
class Student:
def __init__(self, name, age, number):
self.name = name
self.age = age
self.number = number
--------------------------------------------------------------
stud = Student('이름', '24', '13')
stud = Student('이름') # ERROR
# None 사용 시 좀 더 안전함
class Student:
def __init__(self, name, age=None, number=None):
self.name = name
self.age = age
self.number = number
--------------------------------------------------------------
stud = Student('이름', '24', '13')
어디서 활용되는가
이는 책의 내용 (p. 145)을 그대로 가져왔다.
1. 복합 객체의 생성 알고리즘이 이를 합성하는 요소 객체들이 무엇인지 이들의 조립 방법에 독립적일 때
2. 합성할 객체들의 표현이 서로 다르더라도 생성 절차에서 이를 지원해야할 때
Abstract factory 패턴과 차이는 무엇인가
Builder: 복잡한 객체의 단계별 생성에 중점을 둠
생성의 마지막 단계에서 생성한 제품을 반환
Abstract Factory: 제품의 유사군들이 존재할 때 유연한 설계에 중점을 둠
만드는 즉시 제품을 반환 (제품이 모이지 않아도 그 자체만으로 의미가 있기 때문)
My Opinion
Builder는 간단히 말하면, 각 단계별로 함수를 따로 구현하는 것이다.
Python은 private변수가 별도로 없고, 인자의 이름을 명시해서 설정할 수 있기 때문에 그 필요성이 없다.
'스터디 > 디자인 패턴' 카테고리의 다른 글
13주차. Mediator (0) | 2021.09.09 |
---|---|
12주차. Facade (0) | 2021.08.18 |
10주차. Memento (0) | 2021.07.28 |
9주차-2. Command (0) | 2021.07.21 |
9주차-1. Composite (0) | 2021.07.21 |