- 서브시스템에 있는 인터페이스들에 대한 통합된 인터페이스를 제공
- 퍼사드 패턴은 많은 서브시스템(내부구조)을 거대한 클래스(외벽)로 만들어 감싸서 편리한 인터페이스를 제공해줌
- 퍼사드란 서브시스템을 더 쉽게 사용할 수 있도록 만드는 더 높은 수준의 인터페이스를 말함
- 일련의 저수준 인터페이스들을 하나의 고수준 인터페이스로 묶어주는 패턴 -> 이를 통합된 인터페이스라고 부름
- 퍼사드 패턴에 역할은 다음과 같음
- Facade : 클라이언트의 요청을 적절한 서브시스템 클래스에 위임
- Subsystem classes : 서브시스템 기능을 구현. 서브시스템 클래스는 facade에 의해서만 사용됨
- Client : Facade에게 특정 행동을 수행해달라고 요청
- 퍼사드 패턴의 핵심은 상호작용 복잡도를 낮추는데 있음
- 하나의 트랜잭션 안에서 처리되어 연속적으로 일어나는 경우와 독립적으로 각각을 사용하는 것도 퍼사드 패턴
- 클라이언트는 서브시스템 클래스에 의해 구현된 서비스들과 다수의 상호작용을 해야하며 서브시스템 클래스에 대한 정보를 알고 있어야 함
- 즉, 클라이언트가 서브시스템과 강하게 연결되어 있는 상태(tightly coupled)로 서비스 계층에서의 변화는 클라이언트에게 영향을 미치는데 이러한 경우 퍼사드 패턴을 고려해볼 수 있음
- 클라이언트가 원하는 것은 주문을 넣는 것이지 inventory나 shipping payment에 대해서는 관심이 없음. 따라서 서브시스템을 사용하기 쉽게 하는 인터페이스(퍼사드)를 두어 간판혀게 주문을 넣을 수 있도록 변경
- 퍼사드에서 각각의 서비스들을 적절하게 사용하여 주문을 처리하는 것
- 퍼사드 패턴을 적용한 결과 서브시스템 클래스에서 변화가 생겨도 클라이언트 코드에 영향이 가지 않음 (loosely coupled)
- 클라이언트는 복잡한 인터페이스를 싫어하며, 필요한 기능만 들어간 단순한 인터페이스를 선호
- 인터페이스가 단순해질수록 문제 또한 줄어들며 코드도 간단해짐
- 내부의 복잡한 동작을 모두 Wrapping 시켜 간단한 동작만을 공개
- 고수준 객체가 너무 복잡해짐
- 따라서 고수준 객체에 넣을 저수준 객체들 또한 최대한 간단하게 만들어 넣는 방식으로 퍼사드 패턴의 복잡도를 줄일 수 있음
- 퍼사드 패턴이라고 절대로 모든 저수준 객체를 넣어서 만드는 것이 아니라 어떤 저수준 객체는 다른 객체에게는 고수준 객체일 수 있으며 고수준 객체는 다른 고수준 객체의 저수준 객체일 수 있음
- 이러한 객체의 계층화를 최대한 연관성있는 객체들끼리 시킴으로써 고수준 객체를 잘 설계할 수 있음
- 퍼사드 패턴의 목적은 서브시스템과 상호작용 복잡도를 낮추는데 있고, 어댑터 패턴은 클라이언트가 사용하고자 하는 다른 인터페이스로 기존의 인터페이스를 조정하는데 있다.
- 퍼사드는 내부 시스템의 복잡도를 감추기 위해 복잡한 기능을 감싸고 상호작용할 더 단순한 메소드를 제공하는 계층이라고 생각할 수 있다.
- 퍼사드는 클라이언트가 원하는 바를 듣고 내부 시스템을 적절히 이용하여 요청을 이루어주는(어떻게 보면 번역과 같은 일) 이외의 로직을 담고 있어선 안된다.
- 반면에 컨트롤러는 컨트롤러 자체가 자신만의 로직을 가질 수 있다. 또한 프론트 컨트롤러의 목적은 내부 시스템의 복잡도를 감추기 위함이라기보다 모든 요청을 먼저 받는 컨트롤러를 하나 둠으로써 모든 요청에 공통적으로 처리해야하는 로직을 효과적으로 적용하는데 있다.
22-10-04