본문 바로가기
CS(Computer Science)지식/[C++] 디자인 패턴

퍼사드 패턴 (Facade Pattern) 이해하기 : 쉽게 설명한 디자인 패턴(C++)

by 엔지니어 청년 2024. 1. 29.

안녕하세요, 오늘은 소프트웨어 디자인 패턴 중 하나인 퍼사드 패턴(Facade Pattern)에 대해서 알아보겠습니다. '퍼사드'라는 단어는 프랑스어로 '건물의 정면'을 의미하는 단어로, 이를 소프트웨어 세계에 적용하면, '시스템의 정면 인터페이스'라는 뜻을 가집니다. 퍼사드 패턴은 복잡한 시스템을 간단하게 만드는 패턴으로, 외부에서 보기에는 단순하게 보이지만 내부적으로는 복잡한 작업을 수행할 수 있게끔 해줍니다.

퍼사드 패턴이란?

퍼사드 패턴은 복잡한 시스템의 인터페이스를 간단화시키는 구조적 디자인 패턴입니다. 이 패턴은 클라이언트와 복잡한 시스템 사이에 간단한 인터페이스를 제공하여, 시스템의 사용을 용이하게 합니다. 이 패턴을 사용하면 시스템의 복잡성을 감추고, 사용자 친화적인 인터페이스를 제공할 수 있습니다.

이를 예로 들면, 자동차를 운전할 때 우리는 엔진이 어떻게 작동하는지, 브레이크가 어떻게 작동하는지 등에 대해 자세히 알지 못해도 운전을 할 수 있습니다. 이것이 가능한 이유는 자동차 내부의 복잡한 시스템을 운전자에게 단순화된 인터페이스(스티어링 휠, 페달 등)로 제공하기 때문입니다. 이러한 원리가 바로 퍼사드 패턴의 핵심 원리입니다.

퍼사드 패턴을 이해하는 코드 예제

이제 퍼사드 패턴을 이해하는데 도움이 될 간단한 코드 예제를 살펴보겠습니다. 여기서는 컴퓨터 시스템을 예로 들어 퍼사드 패턴을 설명하겠습니다. 컴퓨터 시스템은 CPU, 메모리, 하드 드라이브 등 다양한 하위 시스템으로 구성되어 있습니다. 이러한 각 하위 시스템은 자신의 작업을 수행합니다.

다음은 C++ 코드를 이용한 예제입니다.

// 각각의 서브 시스템들
class CPU {
public:
    void freeze() { std::cout << "CPU freeze\n"; }
    void jump(long position) { std::cout << "CPU jump to " << position << "\n"; }
    void execute() { std::cout << "CPU execute\n"; }
};

class Memory {
public:
    void load(long position, std::string data) { std::cout << "Memory load from " << position << " data: " << data << "\n"; }
};

class HardDrive {
public:
    std::string read(long lba, int size) { 
        std::cout << "HardDrive read lba: " << lba << " size: " << size << "\n";
        return "Boot data";
    }
};

// 퍼사드 클래스
class ComputerFacade {
private:
    CPU cpu;
    Memory memory;
    HardDrive hd;
    long BOOT_ADDRESS = 0;
    long BOOT_SECTOR = 0;
    int SECTOR_SIZE = 1024;

public:
    ComputerFacade(): cpu(CPU()), memory(Memory()), hd(HardDrive()) {}

    void start() {
        cpu.freeze();
        memory.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
        cpu.jump(BOOT_ADDRESS);
        cpu.execute();
    }
};

// 클라이언트 코드
int main() {
    ComputerFacade computer;
    computer.start();
    return 0;
}

이 코드를 실행하면 다음과 같은 결과가 출력됩니다:

CPU freeze
HardDrive read lba: 0 size: 1024
Memory load from 0 data: Boot data
CPU jump to 0
CPU execute

이 예제에서 ComputerFacade 클래스는 CPU, Memory, HardDrive 클래스의 복잡한 인터페이스를 단순화하여 제공합니다. 따라서 클라이언트는 복잡한 컴퓨터 시스템을 이해하지 못해도 컴퓨터를 시작(start)하는 방법만 알면 됩니다. 이것이 바로 퍼사드 패턴의 핵심입니다.

정리

퍼사드 패턴은 복잡한 시스템의 인터페이스를 단순화시키는 구조적 디자인 패턴입니다. 이 패턴을 사용하면 시스템의 복잡