24 Aug 2019

디자인 패턴 10 - 퍼사드 (Facade)

퍼사드(Facade) 패턴은 한 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스를 제공하는 패턴으로, 서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 정의한다.

이 패턴의 목적은 서브시스템들 사이의 의사소통 및 종속성을 최소화하려는 것이다. 서브시스템의 일반적인 기능에 대한 단순화된 하나의 인터페이스를 사용함으로써 복잡성을 줄이는 것이다. 서브시스템의 각 클래스들을 직접 사용할 수도 있지만, 사용자 입장에서는 이 하위수준에 있는 클래스를 사용하는 것이 복잡하게 느껴질 수 있다.

00.png

퍼사드 객체는 사용자에게 필요한 가장 필수적인, 단순하고 일관된 통합 인터페이스만을 제공하고, 내부적으로는 그 기능을 구현하는 클래스들이 서로 유기적으로 동작하도록 묶어주는 역할을 수행한다.

01.png

어느 특정 부분을 담당하는 시스템을 구현할 때, 패턴을 적용함으로써 확장성을 고려한 설계를 하게 되면 보통 작은 클래스들이 많이 만들어지는데, 이는 그 시스템을 재사용 가능한 것으로 만들어주는 유용한 설계가 되기는 하지만 이 시스템을 사용하는 쪽에서는 많은 클래스들을 다 이해하면서 사용하기란 힘든 일이다. 퍼사드 패턴은 이런 시스템에 대해 고수준의 인터페이스를 제공함으로써 사용자에게 적합한 클래스 형태로 제공하는 것이다. 이를 통해 사용자와 서브시스템 간의 결합도를 줄일 수 있으며 더욱 쉽게 사용할 수 있게 된다.

퍼사드 패턴을 사용하더라도, 필요하다면 서브시스템의 클래스에 직접 접근할 수도 있다.

퍼사드 패턴은 서브시스템을 계층화할 때도 사용할 수 있다. 퍼사드 패턴을 통해 각 서브시스템끼리의 접근점을 제공함으로써 서브시스템 간의 종속성을 줄일 수 있고, 이는 어느 특정 서브시스템의 변경이 다른 서브시스템에 독립적으로 이루어지게 한다.

추상 팩토리 패턴을 퍼사드 패턴과 함께 사용함으로써, 퍼사드 객체를 추상 팩토리가 생성하는 식으로 어느 특정 플랫폼에 종속적인 서브시스템의 클래스들을 사용자로부터 감출 수 있다.

중재자(Mediator) 패턴도 기존에 존재하는 클래스의 기능을 추상화한다는 점에서 비슷하지만, 이 패턴의 목적은 여러 객체들간의 커뮤니케이션을 추상화하여 기능성의 집중화를 막자는 것이다. 중재자 패턴에 참여하는 객체들은 서로를 알지 못하고 중재자를 통해서만 상호작용을 한다. 반면 퍼사드 패턴은 서브시스템 인터페이스 자체를 추상화하여 사용을 용이하게 하려는 것이다.


Tags:
Stats:
0 comments