[C/C++] 퍼사드 패턴(Facade Pattern)

할랑말랑·2026년 3월 24일

C/C++

목록 보기
37/45

퍼사드 패턴(Facade Pattern)

복잡한 시스템을 더 쉽게 사용하기 위한 high-level의 인터페이스를 제공

1. 구성 요소

  • Facade : 복잡한 시스템을 다루는 단순한 메서드를 제공
  • Subsystems : 실제로 복잡한 기능을 수행하는 여러 클래스
  • Client : 복잡한 하위 시스템을 직접 호출하지 않고, Facade객체 호출해서 원하는 메서드 호출

2. 장점

  • 낮은 결합도 (Decoupling) : 서브시스템과 클라이언트 분리
  • 복잡한 시스템 단순화
  • 여러 시스템을 일괄 제어
  • 계층화 (Layering)

3. 단점

  • 퍼사드 객체의 비대화 (God Object) : 모든 기능이 한 곳에, 유지보수 어려움
  • 서브시스템 직접 접근 제한

Facade Pattern

  • Facade : GameFacade
  • Subsystems : Input,Sound,Graphics

#include <iostream>
#include <string>
#include <vector>

// 복잡한 서브시스템 1: 입력
class Input
{
public:
    void Initialize() { std::cout << "입력 시스템 초기화" << std::endl; };
};

// 복잡한 서브시스템 2: 그래픽
class Graphics
{
public:
    void Initialize() { std::cout << "그래픽 시스템 초기화" << std::endl; };
};

// 복잡한 서브시스템 3: 사운드
class Sound
{
public:
    void Initialize() { std::cout << "사운드 시스템 초기화" << std::endl; };
};

// 서브시스템들에 대한 단일 인터페이스를 제공하는 퍼사드 클래스
class GameFacade
{
private:
    Sound sound;
    Graphics graphics;
    Input input;

public:
    // 클라이언트는 이 함수 하나만 호출하면 됨
    void Init()
    {
        // 내부적으로는 복잡한 서브시스템들을 순서에 맞게 초기화
        sound.Initialize();
        graphics.Initialize();
        input.Initialize();
    }
};

int main()
{
    GameFacade game;
    // 복잡한 내부 과정을 알 필요 없이, 간단한 메서드 호출만으로 초기화 완료
    game.Init();

    return 0;
}

  • 복잡성 은닉 : main 함수(클라이언트)는 게임을 초기화하기 위해 Sound, Graphics, Input 객체를 각각 생성하고 Initialize()를 순서대로 호출해야 하는 복잡한 과정을 알 필요가 없다.
  • 단일 진입점(Single Entry Point) : GameFacade의 Init() 메서드가 모든 서브시스템에 대한 '단일 창구' 역할을 한다. 클라이언트는 이 창구를 통해서만 시스템과 상호작용하면 된다.
  • 결합도 감소: 클라이언트 코드(main)는 퍼사드 클래스(GameFacade)에만 의존하고, 개별 서브시스템들에는 직접 의존하지 않는다. 따라서 나중에 그래픽 시스템이 다른 것으로 교체되더라도 GameFacade 내부만 수정하면 되므로 클라이언트 코드는 영향을 받지 않는다.

0개의 댓글