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

기교 패턴(Bridge Pattern) 이해하기 : 쉽게 설명한 디자인 패턴(C++)

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

 

1. 기교 패턴이란?


기교 패턴은 구현부에서 추상화 부분을 분리하여 각자 독립적으로 변형할 수 있게 하는 디자인 패턴입니다. 이 패턴은 클래스의 기능과 구현을 두 개의 별도의 클래스 계층으로 분리하여 이들이 각각 독립적으로 변형될 수 있게 합니다.

2. 기교 패턴의 구조


기교 패턴은 다음과 같은 네 가지 주요 구성 요소로 이루어져 있습니다.

  1. Abstraction: 추상화를 정의하고, Implementor에 대한 인터페이스를 유지합니다.
  2. RefinedAbstraction: Abstraction 클래스를 확장하는 클래스입니다.
  3. Implementor: 구현 클래스의 인터페이스를 정의합니다.
  4. 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. 결론


기교 패턴은 클래스의 기능과 구현을 두 개의 별도의 클래스 계층으로 분리하여 이들이 각각 독립적으로 변형될 수 있게 하는 디자인 패턴입니다. 이 패턴을 이해하고 사용하면, 코드의 유연성을 높이고, 클래스 간의 결합도를 줄일 수 있습니다.