더북(TheBook)

3.1 퍼사드란?

 

GoF 책은 퍼사드 패턴을 “하위 시스템의 인터페이스 세트에 일관된 인터페이스를 제공하는 것”이라고 합니다. <헤드 퍼스트 디자인 패턴>(이하 ‘헤드 퍼스트 책’으로 줄임)도 같은 설명을 하면서 “퍼사드 패턴은 하위 시스템의 복잡도를 감추는 동시에 그 전체 기능을 사용하기 쉬운 인터페이스로 제공한다”고 합니다.

우리 주변에서 퍼사드 패턴의 실례를 찾아보면 세탁 모드가 두 가지(‘찌든 때(heavily soiled)’와 ‘조물조물(lightly soiled)’)뿐인 세탁기를 들 수 있습니다. 이 세탁기는 각 모드마다 사전에 지정된 작업을 하도록 프로그램되어 있습니다. 물 온도를 설정하고 물을 덥히고 세탁 시간을 맞추고 탈수 시간을 맞추고 세제를 투입하고 표백제를 넣고 섬유 유연제를 추가하고… 모드에 따라 세탁 방법이 다릅니다(세제 투입량, 물 온도, 탈수 시간 등).

적정 물 온도 및 세탁/탈수 시간을 정하고 세제, 표백제, 섬유 유연제를 얼마나 추가할지 등등 잡다한 로직을 단순한 인터페이스 내부에 두고 두 가지 세탁 모드만 제공하는 것이죠. 안방마님은 빨래 방법을(물 온도, 세탁 시간 등을 어떻게 할지) 복잡하게 고민할 필요 없이 그저 ‘찌든 때’로 할지 ‘조물조물’로 할지만 결정하면 그만입니다. 세탁기 설계에도 이렇게 퍼사드 패턴을 적용한 셈입니다.

퍼사드 패턴은 보통 이런 경우에 많이 씁니다.

레거시 백 엔드(legacy back-end) 시스템에 단일 접근 창구를 제공한다.

클래스에 드라이버 같은 퍼블릭 API를 만든다.

거시적으로(coarse-grained) 서비스에 접근하는 창구를 둔다. 세탁기 예제도 그렇듯 서비스는 결합되어 있다.

네트워크 호출을 줄인다. 퍼사드는 하위 시스템에 여러 차례 호출하는 반면 원격 클라이언트는 퍼사드를 한 번만 호출한다.

보안과 단순함 측면에서 애플리케이션 내부 상세 및 실행 흐름을 캡슐화한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.