1. 기교 패턴이란?
기교 패턴은 구현부에서 추상화 부분을 분리하여 각자 독립적으로 변형할 수 있게 하는 디자인 패턴입니다. 이 패턴은 클래스의 기능과 구현을 두 개의 별도의 클래스 계층으로 분리하여 이들이 각각 독립적으로 변형될 수 있게 합니다.
2. 기교 패턴의 구조
기교 패턴은 다음과 같은 네 가지 주요 구성 요소로 이루어져 있습니다.
- Abstraction: 추상화를 정의하고, Implementor에 대한 인터페이스를 유지합니다.
- RefinedAbstraction: Abstraction 클래스를 확장하는 클래스입니다.
- Implementor: 구현 클래스의 인터페이스를 정의합니다.
- ConcreteImplementor: Implementor 인터페이스를 구현하는 클래스입니다.
3. 기교 패턴의 예시
이제 C++를 사용하여 기교 패턴을 어떻게 구현하는지 살펴보겠습니다. 여기서는 TV와 리모컨의 예제를 사용하겠습니다.
#include <iostream>
// Implementor
class TV {
public:
virtual ~TV() = default;
virtual void on() = 0;
virtual void off() = 0;
};
// ConcreteImplementor
class SamsungTV : public TV {
public:
void on() override {
std::cout << "Samsung TV is on." << std::endl;
}
void off() override {
std::cout << "Samsung TV is off." << std::endl;
}
};
// Abstraction
class RemoteControl {
public:
RemoteControl(TV* tv) : tv(tv) {}
virtual ~RemoteControl() = default;
virtual void turnOn() {
tv->on();
}
virtual void turnOff() {
tv->off();
}
protected:
TV* tv;
};
int main() {
SamsungTV samsungTV;
RemoteControl remote(&samsungTV);
remote.turnOn(); // Output: Samsung TV is on.
remote.turnOff(); // Output: Samsung TV is off.
return 0;
}
위의 코드에서 RemoteControl 클래스는 TV 인터페이스를 사용하여 TV를 켜고 끄는 기능을 추상화합니다. SamsungTV 클래스는 TV 인터페이스를 구현하여 삼성 TV의 실제 동작을 정의합니다.
4. 결론
기교 패턴은 클래스의 기능과 구현을 두 개의 별도의 클래스 계층으로 분리하여 이들이 각각 독립적으로 변형될 수 있게 하는 디자인 패턴입니다. 이 패턴을 이해하고 사용하면, 코드의 유연성을 높이고, 클래스 간의 결합도를 줄일 수 있습니다.
'CS(Computer Science)지식 > [C++] 디자인 패턴' 카테고리의 다른 글
장식자 패턴(Decorator Pattern) 이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.28 |
---|---|
복합체 패턴(Composite Pattern) 이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.28 |
적응자 패턴(Adapter Pattern) 이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.28 |
[C++] GOF의 디자인 패턴 총 정리 (0) | 2024.01.28 |
전략 패턴(Strategy Pattern) 이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2023.07.03 |