작심삼일

3주차-1. Factory Method 본문

스터디/디자인 패턴

3주차-1. Factory Method

yun_s 2021. 4. 30. 23:00
728x90
반응형

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

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

어떤 패턴인가

이전에 설명한 Abstract Factory Pattern은 Factory method를 여러 개 묶은 것으로 볼 수 있다.

전에 예를 들었을 때의 그림을 가져와보면, 위에서 수학, 물리, 화학을 각각 Factory method로 볼 수 있다.


어떻게 쓰는가

Factory method는 크게 네 가지(Product, ConcreteProduct, Creator, ConcreteCreator)로 구성된다.

Product는 물건을 정의하고, Creator는 만드는 것이다.

Concrete가 붙은 것은, 실제로 물건을 정의하거나 실제로 만들 때 사용한다.

이렇게 ConcreteProduct나 ConcreteCreator로 Concrete를 사용해 클래스를 따로 만들어두면 확장성이 좋다.

[Product(Document) & ConcreteProduct(MyDocument)] & [Creator(Application) & ConcreteCreator(MyApplication)]로 표기한다면 그 차이를 쉽게 알 수 있을 것이다.

# Product
class Subject:
    def __init__(self):
    	self.topic = None

# ConcreteProduct
class Math(Subject):
    def __init__(self):
        self.topic = 'math'

# ConcreteProduct
class Physics(Subject):
    def __init__(self):
        self.topic = 'physics'
        
# Creator
class Study:
    def __init__(self):
        self.returns = None
        if self.returns:
            return self.returns

# ConcreteCreator
class StudyMath(Study):
    def __init__(self):
        self.returns = Math()
        
# ConcreteCreator
class StudyPhysics(Study):
    def __init__(self):
        self.returns = Physics()

어디서 활용되는가

이는 책의 내용 (p.157 활용성)을 그대로 가져왔다.

1. 어떤 클래스가 자신이 생성해야 하는 객체의 클래스를 예측할 수 없을 때

2. 생성할 객체를 기술하는 책임을 자신의 서브클래스가 지정했으면 할 때

3. 객체 생성의 책임을 몇 개의 보조 서브클래스 가운데 하나에게 위임하고, 어떤 서브클래스가 위임자인지에 대한 정보를 국소화시키고 싶을 때

 

개인적으로 1,2,3번 모두 같은 얘기를 하고있다고 생각한다.

위의 코드에도 보면 'Subject'라고만 정해두고 어떤 과목인지는 후에 정한다. 이처럼 큰 틀을 정해두고 다른 종류를 여러 개 만들고 싶을 때 사용하는 것 같다.


My Opinion

Factory method는 실제 코딩에서 자주 봤던 것 같다. 내 코드가 '잘 짜여진 코드'와 다르게 보였던 이유 중 하나가 이 method의 유무가 아닐까.

728x90
반응형

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

4주차-2. Template Method  (0) 2021.05.13
4주차-1. Prototype  (0) 2021.05.13
3주차-2. Singleton  (0) 2021.04.30
2주차. Abstract Factory Pattern (추상 팩토리 패턴)  (0) 2021.04.22
1주차. 디자인 패턴이란?  (0) 2021.04.16
Comments