반응형
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
'디자인패턴' 카테고리의 다른 글
[ 디자인 패턴 ] 팩토리 메서드 패턴 (Factory Method) (1) | 2023.08.06 |
---|---|
[ 디자인패턴 ] 디자인 패턴이란? (0) | 2023.08.05 |
[ 디자인 패턴 ] 싱글톤 패턴 (Singleton Pattern ) (0) | 2023.08.04 |