작심삼일

11주차. Builder 본문

스터디/디자인 패턴

11주차. Builder

yun_s 2021. 8. 11. 21:32
728x90
반응형

디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.

틀린 부분은 알려주시면 감사하겠습니다.

어떤 패턴인가

복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공할 수 있도록 합니다.

 

제품에 대한 내부 표현을 다양하게 변화할 수 있다.

생성과 표현에 필요한 코드를 분리한다.

복합 객체를 생성하는 절차를 좀더 세밀하게 나눌 수 있다.


어떻게 쓰는가

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변수가 별도로 없고, 인자의 이름을 명시해서 설정할 수 있기 때문에 그 필요성이 없다.

728x90
반응형

'스터디 > 디자인 패턴' 카테고리의 다른 글

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
Comments