본문 바로가기
디자인패턴

[ 디자인패턴 ] 추상 팩토리 패턴 (Abstract Factory)

by dorlback 2023. 8. 11.
반응형

Abstract Factory 패턴은 '생산자의 생산자'와도 같아요. 복잡한 객체의 생성을 단순화하고, 상황에 따라 다른 객체를 생성하고 싶을 때 유용하게 사용됩니다.

🎯 목표

  • 서로 관련성이 있는 객체들을 함께 생성하려는 경우에 적합합니다.
  • 객체 생성을 캡슐화하여 더 유연한 코드를 작성하는 것이 목표입니다.

💼 예시: 자동차 공장 만들기

Abstract Factory 패턴은 여러 연관된 객체들을 함께 생성할 수 있게 해줍니다. 자동차를 만들 때 엔진, 바퀴, 핸들 등을 생성해야 하는데, 차종에 따라 다른 스펙의 부품이 필요 할것입니다.

 

🏎️ 스포츠 카 vs 🚙 SUV

스포츠 카와 SUV를 만들 때 필요한 부품은 다릅니다. 스포츠 카는 고성능 엔진, 낮은 바퀴, 경량 핸들이 필요하고, SUV는 견고한 엔진, 높은 바퀴, 튼튼한 핸들이 필요할것입니다.

 

from abc import ABC, abstractmethod

# 추상 팩토리
class CarFactory(ABC):
    @abstractmethod
    def create_engine(self): # 엔진 생성
        pass

    @abstractmethod
    def create_wheel(self): # 바퀴 생성
        pass

    @abstractmethod
    def create_handle(self): # 핸들 생성
        pass

# 실제 팩토리
class SportsCarFactory(CarFactory):
    def create_engine(self): # 고성능 엔진 생성
        return HighPerformanceEngine()

    def create_wheel(self): # 낮은 바퀴 생성
        return LowWheel()

    def create_handle(self): # 경량 핸들 생성
        return LightweightHandle()

class SUVFactory(CarFactory):
    def create_engine(self): # 견고한 엔진 생성
        return SturdyEngine()

    def create_wheel(self): # 높은 바퀴 생성
        return HighWheel()

    def create_handle(self): # 튼튼한 핸들 생성
        return SturdyHandle()

# 추상 제품
class Engine(ABC):
    pass

class Wheel(ABC):
    pass

class Handle(ABC):
    pass

# 실제 제품
class HighPerformanceEngine(Engine): # 고성능 엔진
    pass

class LowWheel(Wheel): # 낮은 바퀴
    pass

class LightweightHandle(Handle): # 경량 핸들
    pass

class SturdyEngine(Engine): # 견고한 엔진
    pass

class HighWheel(Wheel): # 높은 바퀴
    pass

class SturdyHandle(Handle): # 튼튼한 핸들
    pass

🎉 결론

Abstract Factory 패턴은 유사한 객체 그룹을 생성하는 방식을 캡슐화하여 코드의 유연성과 재사용성을 높이는 데 도움이 됩니다. 대부분의 프로그래밍 언어에서 적용할 수 있으며, 이 패턴은 유연하고 확장 가능한 시스템을 구축하고자 할 때 매우 유용합니다. 

 

 

728x90