Skip to main content

퍼사드 패턴(Facade Pattern)

퍼사드 패턴이란?

퍼사드 패턴은 복잡한 시스템에 대한 간단한 인터페이스를 제공하는 구조적 디자인 패턴입니다. 이 패턴은 여러 서브시스템의 복잡한 의존성을 퍼사드라는 단일 클래스 뒤에 숨겨서, 클라이언트가 더 쉽게 시스템을 사용할 수 있도록 합니다. 이는 특히 크고 복잡한 코드 라이브러리나 프레임워크를 다룰 때 유용합니다.

퍼사드 패턴의 어원

퍼사드(facade)라는 단어는 '건물의 정면'을 의미합니다. 이 용어는 패턴이 외부에는 간단한 정면을 제공하면서 내부의 복잡한 구조를 숨긴다는 개념을 잘 표현합니다.

퍼사드 패턴의 사용 시기

  • 복잡한 시스템의 일부분만을 사용하고자 할 때
  • 시스템과의 의존성을 최소화하고, 사용하기 쉬운 인터페이스를 제공하고자 할 때
  • 서브시스템 간의 통합을 단순화하고자 할 때 사용됩니다.

퍼사드 패턴의 구조

Client -> Facade -> Subsystem Classes

  • Client: 클라이언트는 퍼사드를 통해 서브 시스템과 상호작용합니다. 이로 인해 클라이언트 코드는 더 간단해지고, 서브시스템의 복잡성에 대해 걱정할 필요가 없습니다.
  • Facade: 퍼사드 클래스는 클라이언트의 요청을 적절한 서브시스템 클래스로 전달합니다. 이 클래스는 어떤 서브시스템 클래스가 요청을 처리할지를 알고 있습니다.
  • Subsystem Classes: 서브 시스템 클래스들은 퍼사드 객체를 통해 들어온 요청을 처리합니다. 각 클래스는 구체적인 기능을 수행하며, 서브 시스템들은 퍼사드의 존재를 모릅니다.

퍼사드 패턴의 장단점

장점

  • 복잡한 하위 시스템에서 코드를 분리하여, 클라이언트와의 결합도를 낮출 수 있습니다.
  • 시스템을 사용하기 쉬운 인터페이스로 제공함으로써 사용자 친화적인 접근성을 제공합니다.
  • 시스템의 개별 부분에 대한 변경이 클라이언트에 미치는 영향을 최소화할 수 있습니다.

단점

  • 퍼사드 클래스가 너무 많은 역할을 맡게 되어, 시스템의 모든 클래스와 강하게 결합될 수 있는 '신(God)' 객체가 될 위험이 있습니다.
  • 초기 설계가 단순할 경우, 퍼사드 패턴이 불필요하게 느껴질 수 있습니다. 확장 시에도 관리해야 할 타입이 늘어나, 복잡성을 증가시킬 수 있습니다.

퍼사드 패턴의 한계

앱 개발 초기에는 구조가 비교적 단순하므로 퍼사드 패턴을 도입하는 것이 불필요하게 느껴질 수 있습니다. 또한, 퍼사드를 도입하면 새로운 계층을 추가하는 것이므로, 시스템의 관리해야 할 부분이 늘어나는 단점도 있습니다. 따라서 퍼사드 패턴의 사용은 신중하게 고려해야 합니다.

예제 코드