[c++] 추상 클래스와 인터페이스의 콜백 및 이벤트 처리 기법

C++에서 추상 클래스와 인터페이스를 사용하여 콜백(callback) 및 이벤트 처리 기법을 구현하는 방법에 대해 알아보겠습니다.

추상 클래스(Abstract Class)란?

추상 클래스는 최소한 하나 이상의 순수 가상 함수(pure virtual function)를 포함하는 클래스입니다. 순수 가상 함수는 함수 몸체가 없고, 파생 클래스에서 구현해야 합니다.

class AbstractClass {
public:
    virtual void doSomething() = 0; // 순수 가상 함수
    virtual void doAnotherThing() {
        // 일반 가상 함수
        // 파생 클래스에서 오버라이드할 수 있지만 선택사항
    }
};

추상 클래스는 인터페이스의 역할을 수행할 수 있으며, 다른 클래스에서 공통된 동작을 정의할 수 있습니다.

인터페이스(Interface)란?

인터페이스는 순수 가상 함수만을 포함하는 추상 클래스입니다. 일반 변수 또는 일반 함수를 가질 수 없습니다.

class Interface {
public:
    virtual void doSomething() = 0; // 순수 가상 함수만 포함
    virtual void doAnotherThing() = 0; // 순수 가상 함수
};

인터페이스를 사용하여 다른 클래스에서 동일한 동작을 보장할 수 있습니다.

콜백(callback) 기법

콜백은 함수나 객체를 다른 함수의 매개변수로 전달하여, 그 함수가 특정 이벤트가 발생했을 때 호출되도록 하는 기법입니다. 추상 클래스나 인터페이스를 사용하여 콜백 인터페이스를 정의하고, 파생 클래스에서 해당 인터페이스를 구현하여 콜백을 처리할 수 있습니다.

class CallbackInterface {
public:
    virtual void onEvent() = 0;
};

class EventProcessor {
public:
    void registerCallback(CallbackInterface* callback) {
        // 콜백 등록
    }

    void doSomething() {
        // 어떤 이벤트가 발생하면
        // 등록된 콜백 호출
        callback->onEvent();
    }
};

class EventHandler : public CallbackInterface {
public:
    virtual void onEvent() {
        // 이벤트 처리
    }
};

int main() {
    EventProcessor processor;
    EventHandler handler;
    processor.registerCallback(&handler);
    processor.doSomething(); // 이벤트 발생
}

결론

추상 클래스와 인터페이스는 다형성(polymorphism)을 통해 객체들 간의 상호작용을 가능하게 합니다. 이를 통해 콜백 및 이벤트 처리 기법을 유연하게 구현할 수 있습니다.

위의 예제를 통해 C++에서 추상 클래스와 인터페이스를 사용하여 콜백 및 이벤트 처리 기법을 쉽게 구현할 수 있음을 확인할 수 있습니다.

이상으로 C++에서 추상 클래스와 인터페이스를 활용한 콜백 및 이벤트 처리 기법에 대해 알아보았습니다.

참고 자료

Modern C++ Design: Generic Programming and Design Patterns Applied

Design Patterns: Elements of Reusable Object-Oriented Software