퍼사드 패턴
IT 위키
- 상위 문서: 소프트웨어 디자인 패턴
- Facade Pattern; 파사드 패턴
- 여러 서브시스템을 하나의 단순한 창구로 감싸, 클라이언트가 그 창구만 알면 되도록 만드는 구조(Structural) 패턴
- facade는 건물의 '정면'이라는 뜻이다. 안이 복잡해도 밖에서는 정면만 본다.
- 클라이언트가 여러 클래스를 제각기 직접 호출하던 구조를, 중간에 창구 하나를 두어 호출이 한 곳으로 모이는 구조로 바꾼다.
- 서브시스템을 감추는 것이지 막는 것은 아니다. 필요하면 클라이언트가 서브시스템을 직접 사용할 수도 있다.
- 클라이언트와 서브시스템 사이의 결합도가 낮아진다.
- 서브시스템 내부가 바뀌어도 퍼사드만 고치면 된다.
- 계층을 나눌 때 각 계층의 진입점으로 쓰기 좋다.
| 패턴 | 목적 |
|---|---|
| 퍼사드(Facade) | 여러 객체를 하나의 단순한 창구로 묶는다. 새 인터페이스를 만든다 |
| 어댑터(Adapter) | 인터페이스가 맞지 않는 클래스를 다른 인터페이스로 바꿔 쓴다 |
| 프록시(Proxy) | 인터페이스를 그대로 유지한 채 접근을 대리하거나 제어한다 |
| 중재자(Mediator) | 객체들이 서로 직접 통신하지 않도록 중앙에서 중개한다. 퍼사드는 클라이언트에서 서브시스템으로 향하는 단방향이다 |
class Projector:
def on(self):
print("프로젝터 켜짐")
class Screen:
def down(self):
print("스크린 내려옴")
class Player:
def play(self, movie):
print("재생:", movie)
class HomeTheaterFacade:
def __init__(self):
self.projector = Projector()
self.screen = Screen()
self.player = Player()
def watch(self, movie):
self.screen.down()
self.projector.on()
self.player.play(movie)
if __name__ == '__main__':
# 클라이언트는 창구 하나만 알면 된다
HomeTheaterFacade().watch("Inception")
