팩토리 메서드 패턴은 객체 생성 코드를 서브클래스에서 정의하도록 위임하는 디자인 패턴입니다. 팩토리 메서드는 구체적인 클래스 대신 부모 클래스 또는 인터페이스에서 정의한 메서드를 통해 객체를 생성하게 하여, 객체 생성의 책임을 서브클래스가 지도록 합니다.
이 패턴은 상속과 다형성을 활용하여 생성 과정을 커스터마이즈할 수 있도록 하는데, 특히 생성해야 할 객체 타입이 자주 변경되거나 새로운 타입이 추가될 가능성이 있는 경우에 유용합니다.
팩토리 메서드 패턴의 구조
from abc import ABC, abstractmethod
# 1. Product 인터페이스 정의
class Document(ABC):
@abstractmethod
def render(self):
pass
# 2. ConcreteProduct 클래스 정의
class PDFDocument(Document):
def render(self):
return "Rendering PDF Document"
class WordDocument(Document):
def render(self):
return "Rendering Word Document"
# 3. Creator 추상 클래스 정의
class DocumentCreator(ABC):
@abstractmethod
def create_document(self) -> Document:
pass
def render_document(self):
# 팩토리 메서드를 통해 Document 객체를 생성하여 사용하는 메서드
doc = self.create_document()
return doc.render()
# 4. ConcreteCreator 클래스 정의
class PDFCreator(DocumentCreator):
def create_document(self) -> Document:
return PDFDocument()
class WordCreator(DocumentCreator):
def create_document(self) -> Document:
return WordDocument()
# 5. 클라이언트 코드
if __name__ == "__main__":
creators = [PDFCreator(), WordCreator()]
for creator in creators:
print(creator.render_document())
# 출력:
# Rendering PDF Document
# Rendering Word Document