Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어에서 콜백(Callback) 함수 이해하기

콜백(callback)은 기본적으로 다른 코드에 인자(argument)로 전달되는 실행 가능한 코드를 의미합니다. 이 코드는 특정 시점에 호출되거나 실행될 것으로 기대되는 코드입니다. 다른 방식으로 표현하면 다음과 같습니다.

함수의 참조(reference)를 다른 함수의 인자로 전달하여 호출하는 경우, 그 함수를 콜백 함수(callback function)라고 부릅니다.

C에서 콜백 구현 방법

C 언어에서는 콜백 함수를 호출하기 위해 함수 포인터(function pointer)를 사용해야 합니다. C에는 자바스크립트나 파이썬처럼 함수를 일급 객체(first-class object)로 다루는 문법이 없기 때문에, 함수의 주소를 포인터에 저장한 뒤 이를 통해 간접적으로 함수를 호출하는 방식으로 콜백을 구현합니다.

다음 예제 코드는 콜백 함수가 실제로 어떻게 동작하는지 보여줍니다.

예제 코드

#include<stdio.h>
void my_function() {
   printf("This is a normal function.");
}
void my_callback_function(void (*ptr)()) {
   printf("This is callback function.\n");
   (*ptr)();   // 콜백 함수 호출
}
main() {
   void (*ptr)() = &my_function;
   my_callback_function(ptr);
}

실행 결과

This is callback function.
This is a normal function.

코드 설명

위 코드의 동작 흐름을 단계별로 살펴보겠습니다.

먼저 my_function()은 일반적인 함수입니다. 그다음 my_callback_function()은 매개변수로 함수 포인터 void (*ptr)()를 받습니다. 이 포인터가 바로 콜백 메커니즘의 핵심입니다.

main() 함수 안에서 &my_function으로 함수의 주소를 가져와 포인터 ptr에 저장하고, 이를 my_callback_function()에 전달합니다. 결과적으로 콜백 함수 내부에서 (*ptr)()를 통해 원래 함수가 실행되는 것을 확인할 수 있습니다.

이러한 콜백 패턴은 이벤트 처리, 정렬 함수의 비교 기준 지정(예: qsort()), 라이브러리의 유연한 확장 등 다양한 상황에서 활용됩니다.