[Design Pattern] Facade

[디자인 패턴][구조 패턴] 퍼사드

Posted by ChaelinJ on April 21, 2021

Facade

한 서브시스템 내의 인터페이스 집합에 대한 획일화 된 하나의 인터페이스를 제공하는 패턴

퍼사드에서 고수준의 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 이용할 수 있습니다.

다이어그램

Facade의 뜻은 ‘건물의 정면’입니다.

건물의 정면에선 내부가 보이지 않듯이 퍼사드 패턴은 서브시스템을 거대한 클래스로 감싸 편리한 인터페이스를 제공합니다.

퍼사드 패턴 예시와 이해

헤어 드라이어 작동을 예시로 했습니다.

우선 ON(냉풍, 열풍), OFF가 있습니다.

  • ON(냉풍) - 팬 ON
  • ON(열풍) - 니크롬선 ON, 팬 ON
  • OFF - 모두 OFF

위처럼 ON, OFF에 따라 일련의 동작을 수행합니다. 퍼사드를 통해 전체를 ON할 수 있고, OFF할 수 있도록하여 서브시스템을 더 쉽게 이용하도록 합니다.

만약 퍼사드 패턴을 이용하지 않는다면 Client가 매번 서브시스템 동작을 하나하나 구동시켜야 하니 불편하고 번거롭습니다.

서브시스템의 인터페이스

서브시스템의 클래스

퍼사드 클래스

Main - client

출력

Cold Air On
팬 작동 ON
Cold Air Off
팬 작동 OFF
------------------
Hot Air On
팬 작동 ON
열선 작동 ON
Hot Air Off
팬 작동 OFF
열선 작동 OFF

클라이언트에서는 하나의 동작으로 쉽게 일련의 수행을 진행할 수 있습니다.

장점

  • 서브시스템 간의 의존 관계가 많을 경우 이를 감소시킬 수 있습니다.
    • 각 서브시스템들의 독립성과 이식성이 높아집니다.
  • 시스템 유지보수를 용이하게 합니다.

단점

  • 퍼사드 클래스는 서브시스템 클래스들을 캡슐화 하는 것은 아니고, 편의를 위한 인터페이스를 제공하는 것입니다.
    • 사용자가 서브시스템 내부의 클래스를 직접 사용하는 것을 제한할 수 없습니다.
  • 퍼사드 패턴을 위해선 래퍼 클래스를 생성해야 하는 등의 단점도 있습니다. 남용하지 말고 상황에 따라 선택해야 합니다.

참고

감사합니다.

Text by Chaelin. Photographs by Chaelin, Unsplash.