엔지니어로 가는 길

퍼사드 패턴(Facade Pattern)이란? 본문

프로그래밍

퍼사드 패턴(Facade Pattern)이란?

탐p슨 2020. 10. 6. 11:46
728x90

Facade Pattern(퍼사드 패턴)

퍼사드 패턴은 서브시스템에 있는 인터페이스들에 대한 통합된 인터페이스를 제공한다. 퍼사드란 서브시스템을 더 쉽게 사용할 수 있도록 만드는 더 높은 수준의 인터페이스를 말한다. 퍼사드 패턴의 등장인물 및 역할은 다음과 같다.

Facade: 클라이언트의 요청을 적절한 서브시스템 클래스에 위임한다.

Subsystem classes: 서브시스템 기능을 구현한다. 서브시스템 클래스는 facade에 의해서만 사용된다.
Client: Facade에게 특정 행동을 수행해달라고 요청한다.

 

온라인 쇼핑몰에서의 주문 시스템을 예로 들어보자.

 

https://springframework.guru/gang-of-four-design-patterns/facade-pattern/

 

현재의 상황에서 클라이언트는 서브시스템 클래스에 의해 구현된 서비스들과 다수의 상호작용을 해야하며, 서브시스템 클래스에 대한 정보를 알고 있어야 한다. 즉, 클라이언트가 서브시스템과 강하게 연결되어 있는 상태(tightly coupled)이다. 따라서 서비스 계층에서의 변화는 클라이언트에게 영향을 미친다. (DB가 오라클에서 NoSQL로 변경되어야 할 경우 이는 클라이언트에게까지 영향을 미친다.) 이럴 때 퍼사드 패턴을 고려해볼 수 있다.

 

https://springframework.guru/gang-of-four-design-patterns/facade-pattern/

 

클라이언트가 원하는 것은 주문을 넣는 것이지, inventory나 shipping, payment에 대해서는 관심이 없다. 따라서 서브시스템을 사용하기 쉽게 하는 인터페이스(퍼사드)를 두어 간편하게 주문을 넣을 수 있도록 변경하였다. 퍼사드에서 각각의 서비스들을 적절하게 사용하여 주문을 처리하는 것이다. 퍼사드 패턴을 적용한 결과 서브시스템 클래스에서 변화가 생겨도 클라이언트 코드에 영향이 가지 않는다(loosely coupled).

 

퍼사드 패턴의 핵심은 상호작용 복잡도를 낮추는데 있다. 따라서 위와 같이 세 개의 서비스가 하나의 트랜잭션 안에서 처리되어 연속적으로 일어나는 경우도 퍼사드 패턴이고, 아래처럼 독립적으로 각각을 사용하는 것도 퍼사드 패턴이다.

 

https://www.tutorialspoint.com/design_pattern/facade_pattern.htm

 

ShapeMaker라는 퍼사드는 클라이언트가 각 도형의 클래스와 메소드에 대해 모르더라도 도형을 그릴 수 있도록 도와준다(복잡도를 낮춰준다).


비교

Facade vs Adapter

퍼사드 패턴의 목적은 서브시스템과 상호작용 복잡도를 낮추는데 있고, 어댑터 패턴은 클라이언트가 사용하고자 하는 다른 인터페이스로 기존의 인터페이스를 조정하는데 있다.

Facade vs Front Controller

퍼사드는 내부 시스템의 복잡도를 감추기 위해 복잡한 기능을 감싸고 상호작용할 더 단순한 메소드를 제공하는 계층이라고 생각할 수 있다. 퍼사드는 클라이언트가 원하는 바를 듣고 내부 시스템을 적절히 이용하여 요청을 이루어주는(어떻게 보면 번역과 같은 일) 이외의 로직을 담고 있어선 안된다.

 

반면에 컨트롤러는 컨트롤러 자체가 자신만의 로직을 가질 수 있다. 또한 프론트 컨트롤러의 목적은 내부 시스템의 복잡도를 감추기 위함이라기보다 모든 요청을 먼저 받는 컨트롤러를 하나 둠으로써 모든 요청에 공통적으로 처리해야하는 로직을 효과적으로 적용하는데 있다.

 

참고

https://springframework.guru/gang-of-four-design-patterns/facade-pattern/

https://www.tutorialspoint.com/design_pattern/facade_pattern.htm

https://stackoverflow.com/questions/10344085/what-is-the-difference-between-a-controller-and-a-facade?lq=1

https://stackoverflow.com/questions/839359/front-controller-vs-fa%C3%A7ade-pattern

728x90
Comments