반응형
퍼사드 디자인 패턴 개요
- 퍼사드는 건물의 정면, 돋보이는 쪽을 의미. 즉, 건물의 외관만 신경 쓰지 내부 구조는 신경 쓰지 않는다.
- 복잡한 내부 로직을 감추고 클라이언트가 쉽게 접근할 수 있는 인터페이스 제공
- 구성요소 : 퍼사드, 시스템, 클라이언트
- 목적
- 서브시스템의 인터페이스를 통합시킨 단일 인터페이스를 제공해 클라이언트가 쉽게 서브시스템에 접근할 수 있게 한다.
- 단일 인터페이스 객체로 복잡한 서브시스템을 대체한다. 서브시스템을 캡슐화하는 것이 아니라 모든 서브시스템들을 결합한다.
- 클라이언트와 내부 구현을 분리한다.
퍼사드
- 어떤 서브시스템이 요청에 알맞는지 알고 있다.
- 컴포지션을 통해 클라이언트의 요청을 서브시스템 객체에 전달
- 클라이언트는 서브시스템이 아닌 퍼사드에만 요청
- 단, 퍼사드는 서브시스템을 캡슐화하지 않는다. 때문에 클라이언트는 퍼사드를 통하지 않고도 서브시스템에 접근할 수 있다.
시스템
- 서브시스템의 기능을 구현하는 클래스
- 시스템은 각기 다른 역할을 하는 클래스의 집합
- 퍼사드 객체가 지시한 일을 담당하지만 퍼사드의 존재도 모르며 참조하지도 않는다.
클라이언트
- 퍼사드를 인스턴스화하는 클래스
- 작업을 수행하도록 요청
퍼사드 패턴 구현
- 구현 예시) 결혼식 준비 >>> 클라이언트: 나, 퍼사드: 웨딩플래너, 시스템: 각 담당 업체
## 퍼사드(인터페이스)
class EventManager(object):
def __init__(self):
print("웨딩플래너 : 제가 당신을 도와드릴게요.\\n\\n")
def arrange(self):
self.hotelier = Hotelier()
self.hotelier.book_hotel()
self.florist = Florist()
self.florist.set_flower_requirements()
self.caterer = Caterer()
self.caterer.set_cuisine()
self.musician = Musician()
self.musician.set_music_type()
## 서브시스템(구현)
# 호텔리어 - 호텔 담당
class Hotelier(object):
def __init__(self):
print("호텔리어 : 안녕하세요.\\n")
def book_hotel(self):
print("호텔리어 : 예약을 도와드리겠습니다.\\n\\n")
# 플로리스트 - 꽃 담당
class Florist(object):
def __init__(self):
print("플로리스트 : 안녕하세요.\\n")
def set_flower_requirements(self):
print("플로리스트 : 장미와 백합을 준비하겠습니다.\\n\\n")
# 요리조달자 - 요리 담당
class Caterer(object):
def __init__(self):
print("요리사 : 안녕하세요.\\n")
def set_cuisine(self):
print("요리사 : 뷔페를 준비하겠습니다.\\n\\n")
# 음악가 - 연주 담당
class Musician(object):
def __init__(self):
print("뮤지션 : 안녕하세요.\\n")
def set_music_type(self):
print("뮤지션 : 재즈를 준비하겠습니다.\\n\\n")
## 클라이언트
class You(object):
def __init__(self):
print("나 : 결혼식 준비를 해야해!\\n")
def ask_event_manager(self):
print("나 : 웨딩플래너에게 연락해보자!\\n\\n")
em = EventManager()
em.arrange()
def __del__(self):
print("나 : 다들 고마워요!\\n")
you = You()
you.ask_event_manager()
# 출력 결과
'''
나 : 결혼식 준비를 해야해!
나 : 웨딩플래너에게 연락해보자!
웨딩플래너 : 제가 당신을 도와드릴게요.
호텔리어 : 안녕하세요.
호텔리어 : 예약을 도와드리겠습니다.
플로리스트 : 안녕하세요.
플로리스트 : 장미와 백합을 준비하겠습니다.
요리사 : 안녕하세요.
요리사 : 뷔페를 준비하겠습니다.
뮤지션 : 안녕하세요.
뮤지션 : 재즈를 준비하겠습니다.
나 : 다들 고마워요!
'''
최소 지식 원칙
- 퍼사드 패턴은 최소 지식 원칙을 기반으로 한다.
- 최소 지식 원칙은 상호작용하는 객체를 아주 가까운 몇 개의 객체로 최소화한다.
- 생성하는 모든 객체가 몇 개의 클래스와 연관되며 어떤식으로 상호작용하는지 알아야 한다.
- 원칙에 따라 지나치게 얽히는 클래스는 지양한다.
- 클래스간 의존도가 높아지지 않도록 회귀적인 구조는 피한다.
반응형
'나는 이렇게 본다 > 파이썬 디자인 패턴' 카테고리의 다른 글
팩토리 메소드, 추상 팩토리 패턴 (0) | 2022.05.30 |
---|---|
심플 팩토리 패턴 (0) | 2022.05.27 |
모노스테이트, 메타클래스, 싱글톤 구현예시 (0) | 2022.05.25 |
싱글톤 패턴, 게으른 초기화, 모듈 싱글톤 (0) | 2022.05.24 |
디자인 패턴 개요 (0) | 2022.05.23 |