먼저 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의 라이브러리를 쓰더라도 위 코드와 거의 유사한 시나리오로 진행될 것이다. 우리는 여기서부터 시작해 원하는 결과까지 도달할 것이다.