- Today
- Total
작심삼일
3주차-1. Factory Method 본문
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.
틀린 부분은 알려주시면 감사하겠습니다.
어떤 패턴인가
이전에 설명한 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의 유무가 아닐까.
'스터디 > 디자인 패턴' 카테고리의 다른 글
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 |