시스템 설계 및 디자인/디자인 패턴
[디자인패턴][Factory Method] 팩토리 메소드 패턴
앤테바
2022. 3. 24. 13:46
반응형
팩토리 메소드 패턴 정의
팩토리 메소드는 가장 널리 사용되는 생성 패턴 중 하나입니다. '공장' 즉 객체를 생산하는 패턴인데 객체를 만들어 내는 부분을 서브 클래스에 위임하는 패턴이라고 할 수 있습니다.
팩토리 메소드는 객체 생성을 처리하며, 팩토리 메소드를 이용하면 객체를 생성하는 작업을 서브클래스에 캡슐화시킬 수 있습니다. 이렇게 하면 슈퍼클래스에 있는 클라이언트 코드와 서브클래스에 있는 객체 생성 코드를 분리시킬 수 있습니다.(by 헤드퍼스트 디자인패턴)
구상(Concrete) 형식의 인스턴스를 만드는 작업을 캡슐화
팩토리 메소드 패턴 클래스 다이어그램
팩토리 메소드 패턴 활용
빌딩 클래스가 있고, 빌딩은 유럽 스타일, 한국 스타일로 지어질 수 있습니다. 빌딩 클래스를 상속 받아서 병원 건물과 대학 건물을 지을 수 있습니다. 건설사 추상 클래스가 있고 유럽건설사와 한국건설사 있습니다. 유럽 건설사는 유럽스타일병원, 유럽스타일대학을 짓고 한국 건설사는 한국스타일병원, 한국스타일대학을 건설할 수 있습니다.
from abc import ABC, abstractmethod
class ConstructionFirm(ABC):
"""
건설사 추상 클래스
"""
def __init__(self):
self.name == None
@abstractmethod
def create(self, type):
pass
class EuropeConstructionFirm(ConstructionFirm):
def __init__(self):
self.name = "유럽건설사"
def create(self, building_type):
if building_type == "병원":
return EuropeStyleHospitalBuilding()
elif building_type == "대학":
return EuropeStyleUniversityBuilding()
else:
raise Exception('not supported building type')
class KoreaConstructionFirm(ConstructionFirm):
def __init__(self):
self.name = "한국건설사"
def create(self, building_type):
if building_type == "병원":
return KoreaStyleHospitalBuilding()
elif building_type == "대학":
return KoreaStyleUniversityBuilding()
else:
raise Exception('not supported building type')
class Building(ABC):
def __init__(self):
self.name = None
class EuropeStyleHospitalBuilding(Building):
def __init__(self):
self.name = "유럽 스타일 병원 빌딩"
print(f'{self.name} 완공')
class EuropeStyleUniversityBuilding(Building):
def __init__(self):
self.name = "유럽 스타일 대학 빌딩"
print(f'{self.name} 완공')
class KoreaStyleHospitalBuilding(Building):
def __init__(self):
self.name = "한국 스타일 병원 빌딩"
print(f'{self.name} 완공')
class KoreaStyleUniversityBuilding(Building):
def __init__(self):
self.name = "한국 스타일 대학 빌딩"
print(f'{self.name} 완공')
europeConstFirm = EuropeConstructionFirm()
europeConstFirm.create("병원")
europeConstFirm.create("대학")
koreaConstFirm = KoreaConstructionFirm()
koreaConstFirm.create("병원")
koreaConstFirm.create("대학")
출력
유럽 스타일 병원 빌딩 완공
유럽 스타일 대학 빌딩 완공
한국 스타일 병원 빌딩 완공
한국 스타일 대학 빌딩 완공
요약
- 객체 생성을 한 곳에 모아놓고 체계적 관리
- 의존성 역전 원칙에 따라 구체적인 것이 아니라 추상적인 것에 의존하는 설계
참고 자료'
https://en.wikipedia.org/wiki/Factory_method_pattern
https://im-yeobi.io/posts/design-pattern/factory-pattern-1/
반응형