퍼사드 패턴

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")