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

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

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

1. 적응자 패턴이란?

적응자 패턴은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 디자인 패턴입니다. 이 패턴을 사용하면 인터페이스가 호환되지 않아 함께 작동할 수 없는 클래스들이 함께 작동하도록 할 수 있습니다.

2. 적응자 패턴의 구조

적응자 패턴은 다음과 같은 세 가지 주요 구성 요소로 이루어져 있습니다.

  1. Target: 사용자가 기대하는 인터페이스를 정의합니다.
  2. Adaptee: 적응되어야 하는 인터페이스를 가진 클래스입니다.
  3. Adapter: Adaptee의 인터페이스를 Target 인터페이스로 적응시킵니다.

3. 적응자 패턴의 예시

이제 C++를 사용하여 적응자 패턴을 어떻게 구현하는지 살펴보겠습니다. 여기서는 라운드 핀을 가진 전원 플러그를 미국 스타일의 두 핀 플러그로 적응시키는 예제를 사용하겠습니다.

#include <iostream>

// Target
class USPlug {
public:
    virtual ~USPlug() = default;
    virtual void plugIn() const = 0;
};

// Adaptee
class RoundPlug {
public:
    void insert() const {
        std::cout << "Round plug is inserted." << std::endl;
    }
};

// Adapter
class PlugAdapter : public USPlug {
public:
    PlugAdapter(const RoundPlug& roundPlug) : roundPlug(roundPlug) {}
    void plugIn() const override {
        roundPlug.insert();
    }

private:
    const RoundPlug& roundPlug;
};

int main() {
    RoundPlug roundPlug;
    PlugAdapter adapter(roundPlug);

    adapter.plugIn();  // Output: Round plug is inserted.

    return 0;
}

위의 코드에서 PlugAdapter 클래스는 USPlug 인터페이스를 구현하고, RoundPlug의 인터페이스를 USPlug 인터페이스로 적응시킵니다.

4. 결론

적응자 패턴은 인터페이스가 호환되지 않아 함께 작동할 수 없는 클래스들이 함께 작동하도록 하는 데 유용한 디자인 패턴입니다. 이 패턴을 이해하고 사용하면, 코드의 유연성을 높이고, 기존 코드를 재사용할 수 있습니다.