디자인패턴 - Factory Method

code_able·5일 전
0

Factory Method 패턴이란

팩토리 메서드 패턴은 객체 생성 코드를 서브클래스에서 정의하도록 위임하는 디자인 패턴입니다. 팩토리 메서드는 구체적인 클래스 대신 부모 클래스 또는 인터페이스에서 정의한 메서드를 통해 객체를 생성하게 하여, 객체 생성의 책임을 서브클래스가 지도록 합니다.

이 패턴은 상속과 다형성을 활용하여 생성 과정을 커스터마이즈할 수 있도록 하는데, 특히 생성해야 할 객체 타입이 자주 변경되거나 새로운 타입이 추가될 가능성이 있는 경우에 유용합니다.

팩토리 메서드 패턴의 구조

  • Creator (창조자): 객체 생성을 위한 팩토리 메서드를 선언하는 추상 클래스입니다. 팩토리 메서드는 일반적으로 추상 메서드로 정의되며, 이를 구현하는 서브클래스들이 실제 생성 로직을 담당합니다.
  • ConcreteCreator (구체 창조자): Creator의 서브클래스이며, 특정 제품(객체)을 생성하는 팩토리 메서드를 구현합니다.
  • Product (제품): 생성될 객체의 인터페이스 또는 추상 클래스입니다.
  • ConcreteProduct (구체 제품): 실제 생성되는 객체들로, Product 인터페이스를 구현합니다.

장점

  • 객체 생성의 책임 분리: 객체 생성 로직을 별도의 메서드로 분리하여 관리합니다.
  • 확장성: 새로운 타입의 객체를 쉽게 추가할 수 있으며, 클라이언트 코드를 수정하지 않고도 새로운 객체를 생성할 수 있습니다.
  • 유연성: 클라이언트는 추상 클래스를 통해 작업하므로 객체 생성 방식을 변경하거나 확장해도 클라이언트 코드에는 영향을 주지 않습니다.

예제 코드

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
profile
할수 있다! code able
post-custom-banner

0개의 댓글