C-Style Callback

먼저 C-Style Callback이 무엇인지를 설명하고자 한다.
보다 기술적인 설명을 하는 것 보다 다음 코드를 읽으면서 이야기를 진행하자.

#include <stdio.h>
#include <stdlib.h>

// 전역변수 콜백 함수 포인터.
// 어떤 라이브러리 어딘가에 있다고 가정한다.
void (*g_callback)(void) = NULL;

// 우리가 직접 만들어야 하는 콜백 함수
// 라이브러리는 이 함수를 필요로 한다.
void callback(void)
{
    printf("Our callback function is called.n");
}

int main(int argc, char** argv)
{
    int nCount = 3; // 3회 callback 함수를 호출

    // 라이브러리에 우리의 콜백 함수를 등록하는 과정이라고 가정한다.
    g_callback = callback;

    // g_callback이 우리가 만든 callback을 대신한다.
    // 현재 우리가 만든 main 함수 안에서 호출되고 있으나
    // 이 while문의 구조는 라이브러리 내부 어딘가라고 가정한다.
    while(nCount--)
    {
        g_callback();
    }

    return EXIT_SUCCESS;
}

6행에 지정한 전역 변수는 우리가 의도한 것이 아닌 어떤 라이브러리 안에 포함된 가상의 함수 포인터를 의미한다. 이 프로그램의 핵심은 20번째 줄에서 우리가 만든 함수가 전역 변수에 대입되고, 27번째 줄에서 비로소 콜백이 호출된다는 것이다.

결과는 기본적인 C언어 함수 포인터의 예제 수준을 벗어나지 않으나, 어떤 C-Style의 라이브러리를 쓰더라도 위 코드와 거의 유사한 시나리오로 진행될 것이다. 우리는 여기서부터 시작해 원하는 결과까지 도달할 것이다.

차례로 돌아가기