Skip to content

Latest commit

 

History

History
59 lines (45 loc) · 4.32 KB

File metadata and controls

59 lines (45 loc) · 4.32 KB

퍼사드 패턴(Facade Pattern)

퍼사드 패턴

  • 서브시스템에 있는 인터페이스들에 대한 통합된 인터페이스를 제공
    • 퍼사드 패턴은 많은 서브시스템(내부구조)을 거대한 클래스(외벽)로 만들어 감싸서 편리한 인터페이스를 제공해줌
    • 퍼사드란 서브시스템을 더 쉽게 사용할 수 있도록 만드는 더 높은 수준의 인터페이스를 말함
    • 일련의 저수준 인터페이스들을 하나의 고수준 인터페이스로 묶어주는 패턴 -> 이를 통합된 인터페이스라고 부름
  • 퍼사드 패턴에 역할은 다음과 같음
    • Facade : 클라이언트의 요청을 적절한 서브시스템 클래스에 위임
    • Subsystem classes : 서브시스템 기능을 구현. 서브시스템 클래스는 facade에 의해서만 사용됨
    • Client : Facade에게 특정 행동을 수행해달라고 요청
  • 퍼사드 패턴의 핵심은 상호작용 복잡도를 낮추는데 있음
  • 하나의 트랜잭션 안에서 처리되어 연속적으로 일어나는 경우와 독립적으로 각각을 사용하는 것도 퍼사드 패턴

퍼사드 패턴을 사용할 때

  • 클라이언트는 서브시스템 클래스에 의해 구현된 서비스들과 다수의 상호작용을 해야하며 서브시스템 클래스에 대한 정보를 알고 있어야 함
  • 즉, 클라이언트가 서브시스템과 강하게 연결되어 있는 상태(tightly coupled)로 서비스 계층에서의 변화는 클라이언트에게 영향을 미치는데 이러한 경우 퍼사드 패턴을 고려해볼 수 있음
  • 클라이언트가 원하는 것은 주문을 넣는 것이지 inventory나 shipping payment에 대해서는 관심이 없음. 따라서 서브시스템을 사용하기 쉽게 하는 인터페이스(퍼사드)를 두어 간판혀게 주문을 넣을 수 있도록 변경
  • 퍼사드에서 각각의 서비스들을 적절하게 사용하여 주문을 처리하는 것
  • 퍼사드 패턴을 적용한 결과 서브시스템 클래스에서 변화가 생겨도 클라이언트 코드에 영향이 가지 않음 (loosely coupled)

퍼사드 패턴의 장점과 단점

장점

  • 클라이언트는 복잡한 인터페이스를 싫어하며, 필요한 기능만 들어간 단순한 인터페이스를 선호
  • 인터페이스가 단순해질수록 문제 또한 줄어들며 코드도 간단해짐
  • 내부의 복잡한 동작을 모두 Wrapping 시켜 간단한 동작만을 공개

단점

  • 고수준 객체가 너무 복잡해짐
    • 따라서 고수준 객체에 넣을 저수준 객체들 또한 최대한 간단하게 만들어 넣는 방식으로 퍼사드 패턴의 복잡도를 줄일 수 있음
  • 퍼사드 패턴이라고 절대로 모든 저수준 객체를 넣어서 만드는 것이 아니라 어떤 저수준 객체는 다른 객체에게는 고수준 객체일 수 있으며 고수준 객체는 다른 고수준 객체의 저수준 객체일 수 있음
    • 이러한 객체의 계층화를 최대한 연관성있는 객체들끼리 시킴으로써 고수준 객체를 잘 설계할 수 있음

다른 디자인 패턴과 비교

Facade vs Adapter

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

Facade vs Front Controller

  • 퍼사드는 내부 시스템의 복잡도를 감추기 위해 복잡한 기능을 감싸고 상호작용할 더 단순한 메소드를 제공하는 계층이라고 생각할 수 있다.
  • 퍼사드는 클라이언트가 원하는 바를 듣고 내부 시스템을 적절히 이용하여 요청을 이루어주는(어떻게 보면 번역과 같은 일) 이외의 로직을 담고 있어선 안된다.
  • 반면에 컨트롤러는 컨트롤러 자체가 자신만의 로직을 가질 수 있다. 또한 프론트 컨트롤러의 목적은 내부 시스템의 복잡도를 감추기 위함이라기보다 모든 요청을 먼저 받는 컨트롤러를 하나 둠으로써 모든 요청에 공통적으로 처리해야하는 로직을 효과적으로 적용하는데 있다.
22-10-04

Reference