반응형
🎈 퍼사드 패턴 (Facade Pattern)
• 복잡한 시스템을 단순화된 인터페이스를 제공하여
사용자가 시스템 일부분을 쉽게 사용할 수 있도록 한다.
• 디자인 패턴 중 구조 패턴에 해당된다.
활용 방안
• 복잡한 시스템 단순화
• 라이브러리 래핑: 외부 라이브러리 or API를 이용하여 사용자 친화적인 인터페이스 제공
• 기능 묶기: 서브 시스템을 논리적으로 묶어서 일관된 인터페이스 제공
[예제 코드]
#include <iostream>
class CPU {
public:
void start() {
std::cout << "CPU 시작" << std::endl;
}
void shutdown() {
std::cout << "CPU 종료" << std::endl;
}
};
class Memory {
public:
void load() {
std::cout << "Memory 로딩" << std::endl;
}
void free() {
std::cout << "Memory 종료" << std::endl;
}
};
class PowerSupply {
public:
void turnOn() {
std::cout << "전원 공급 ON" << std::endl;
}
void turnOff() {
std::cout << "전원 공급 OFF" << std::endl;
}
};
class ComputerFacade {
private:
CPU cpu;
Memory memory;
PowerSupply powerSupply;
public:
void startComputer() {
std::cout << "---Start computer---" << std::endl;
powerSupply.turnOn();
memory.load();
cpu.start();
std::cout << "---Computer started successfully---\n" << std::endl;
}
void shutdownComputer() {
std::cout << "---Shut down computer---" << std::endl;
cpu.shutdown();
memory.free();
powerSupply.turnOff();
std::cout << "---Computer shutdown completed---" << std::endl;
}
};
int main() {
ComputerFacade computer;
// 컴퓨터 켜기
computer.startComputer();
// 컴퓨터 끄기
computer.shutdownComputer();
return 0;
}
이 컴퓨터는 여러 하위 시스템(전원, 메모리, CPU 등)으로 구성되어 있다.
CPU, Memory, PowerSupply와 같은 서브 시스템 클래스가
컴퓨터를 켜고 끄는 과정에서 복합적으로 동작한다.
ComputerFacade 클래스로 컴퓨터를 켜고 끄는 작업을 단순화 하였다.
🎈 퍼사드 패턴 장단점
+ 단순한 인터페이스 제공: 복잡한 시스템 또는 서브 시스템 래핑
→ 클라이언트 코드는 시스템의 복잡성을 숨길 수 있다.
+ 의존성 관리: 클라이언트는 퍼사드 클래스만 의존하면 되기에 강한 결합 방지
- 유연성 감소: 퍼사드 클래스 외 접근할 수 없으므로
특정 기능을 직접 사용하고자 할 때 유연성이 감소할 수 있다.
- 성능 오버헤드: 메서드 호출이 퍼사드 클래스를 통해 이루어지기에 성능 오버헤드가 발생할 수 있다.
[예제 코드]
#include <iostream>
class GraphicsBuffer {
public:
void create() {
std::cout << "그래픽 버퍼 생성" << std::endl;
}
};
class RenderingEngine {
public:
void render() {
std::cout << "그래픽 랜더링" << std::endl;
}
};
class AudioSystem {
public:
void playSound() {
std::cout << "오디오 재생" << std::endl;
}
};
// 그래픽 라이브러리 퍼사드 클래스
class GraphicsLibraryFacade {
private:
GraphicsBuffer buffer;
RenderingEngine renderer;
AudioSystem audio;
public:
void initialize() {
buffer.create();
renderer.render();
audio.playSound();
}
};
int main() {
// 퍼사드 패턴 적용 X
GraphicsBuffer buffer;
RenderingEngine renderer;
AudioSystem audio;
buffer.create();
renderer.render();
audio.playSound();
puts("----------------------------------------");
// 그래픽 라이브러리 초기화 (by. 퍼사드 클래스)
GraphicsLibraryFacade graphicsLibrary;
graphicsLibrary.initialize();
return 0;
}
퍼사드 패턴을 적용하지 않는다면 직접적으로 메서드를 호출하지만
GraphicsLibraryFacade 클래스로 서브 시스템을 단순화 할 수 있다.
클라이언트는 입장에서는 퍼사트 클래스를 사용하여
그래픽 라이브러리 초기화 및 작업 가능
반응형
'까망 동네 > 디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 프록시 패턴 (Proxy Pattern) (3) | 2023.11.11 |
---|---|
[디자인 패턴] 메멘토 패턴 (Memento Pattern) (1) | 2023.11.10 |
[디자인 패턴] 관찰자(Observer) 패턴 (4) | 2023.11.06 |
[디자인패턴] 컴포지트 패턴 (Composite Pattern) (1) | 2023.11.05 |
[디자인패턴] 인터프리터 패턴 (Interpreter Pattern) (2) | 2023.11.04 |
댓글