콜백 함수 در C
안녕하세요, 열망하는 프로그래머 여러분! 오늘 우리는 C 언어의 fascinatig한 콜백 함수 세계로 접근해 보겠습니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 이 개념을 안내해 드리는 것을 기쁘게 생각합니다. 믿으세요, 콜백을 이해한 후에는 프로그래밍에서 새로운 초능력을 풀어냈을 것 같은 느낌을 받게 될 것입니다!
콜백 함수는 무엇인가요?
초보 단계로 시작해 보겠습니다. 피자 파티에서 (누가 피자를 좋아하지 않겠어요?) 친구에게 피자가 도착하면 전화해 달라고 부탁하는 상황을 상상해 보세요. 친구는 사실상 콜백을 수행하고 있습니다 - 특정 이벤트가 발생했을 때 전화를 거네요.
C 프로그래밍에서 콜백 함수는 비슷하게 작동합니다. 콜백 함수는 다른 함수에 인수로 전달되는 함수입니다. 이 다른 함수는 특정 이벤트가 발생하거나 작업이 완료될 때 전달된 함수를 "되돌려 호출"합니다.
다음은 콜백 함수의 간단한 구조입니다:
void callback_function() {
// 함수 본문
}
void main_function(void (*callback)()) {
// 일부 코드
callback(); // 콜백 함수 호출
// 더 많은 코드
}
int main() {
main_function(callback_function);
return 0;
}
이 예제에서 callback_function
은 우리의 콜백입니다. 이를 main_function
에 전달하고, main_function
은 실행 중 특정 시점에서 이를 호출합니다.
C에서 콜백 함수의 예
콜백을 더 구체적으로 보겠습니다. 콜백을 사용하여 계산이 완료된 후 메시지를 출력하는 간단한 프로그램을 만들어 보겠습니다.
#include <stdio.h>
// 우리의 콜백 함수
void print_result(int result) {
printf("결과는: %d\n", result);
}
// 계산을 수행하고 콜백을 호출하는 함수
void perform_operation(int a, int b, void (*callback)(int)) {
int sum = a + b;
callback(sum); // 콜백 함수에 결과를 호출
}
int main() {
perform_operation(5, 3, print_result);
return 0;
}
이 예제에서:
- 우리는
print_result
라는 콜백 함수를 정의합니다. 이 함수는 정수를 입력받아 출력합니다. -
perform_operation
함수는 두 정수와 함수 포인터를 인수로 받습니다. -
perform_operation
내부에서 우리는 합을 계산하고 그 결과로 콜백 함수를 호출합니다. -
main
함수에서 우리는 숫자와print_result
콜백을perform_operation
에 호출합니다.
이 프로그램을 실행하면 다음과 같은 출력이 나타납니다: "결과는: 8"
인수를 받는 콜백 함수
콜백은 여러 인수를 받을 수 있습니다. 이전 예제를 확장하여 더 많은 연산을 포함시켜 보겠습니다:
#include <stdio.h>
// 인수를 받는 콜백 함수
void print_operation(char operation, int a, int b, int result) {
printf("%d %c %d = %d\n", a, operation, b, result);
}
// 계산을 수행하고 콜백을 호출하는 함수
void perform_operation(int a, int b, char op, void (*callback)(char, int, int, int)) {
int result;
switch(op) {
case '+': result = a + b; break;
case '-': result = a - b; break;
case '*': result = a * b; break;
case '/': result = a / b; break;
default: printf("잘못된 연산\n"); return;
}
callback(op, a, b, result);
}
int main() {
perform_operation(5, 3, '+', print_operation);
perform_operation(10, 4, '-', print_operation);
perform_operation(7, 2, '*', print_operation);
perform_operation(20, 5, '/', print_operation);
return 0;
}
이 프로그램은 다음과 같은 출력을 생성합니다:
5 + 3 = 8
10 - 4 = 6
7 * 2 = 14
20 / 5 = 4
여기서 우리의 콜백 print_operation
은 네 개의 인수를 받습니다: 연산, 두 피연산자, 그리고 결과. 이를 통해 우리는 더 유연하고 정보가 풍부한 출력을 생성할 수 있습니다.
C에서의 콜백 타입
C에서는 콜백을 두 가지 주요 유형으로 분류할 수 있습니다:
-
동기 콜백: 이는 인수로 전달된 함수에 즉시 실행됩니다. 우리의 예제는 모두 동기 콜백입니다.
-
비동기 콜백: 이는 나중에 실행되도록 예약됩니다. 이는 이벤트駆動 프로그래밍이나 I/O 연산에서 자주 사용됩니다.
다음은 이러한 유형을 요약하는 표입니다:
유형 | 설명 | 사용 사례 | 예제 |
---|---|---|---|
동기 | 즉시 실행 | 간단한 연산, 계산 | 우리의 산술 연산 예제 |
비동기 | 나중에 실행 | 이벤트 처리, I/O 연산 | 파일 읽기/쓰기 콜백, GUI 이벤트 핸들러 |
다음은 비동기 콜백을 사용하는 간단한 예제입니다:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void callback_function(int signum) {
printf("시그널 %d을 수신했습니다\n", signum);
}
int main() {
signal(SIGALRM, callback_function);
alarm(5); // 5초 후에 알림 설정
printf("알림을 기다리는 중...\n");
pause(); // 시그널을 기다립니다
return 0;
}
이 예제에서 callback_function
은 비동기 콜백으로 설정되어 있으며, SIGALRM 시그널을 수신할 때 호출됩니다. alarm(5)
함수는 5초 후에 SIGALRM 시그널을 보내고, pause()
함수는 시그널을 기다립니다.
그리고 여러분! 우리는 C 언어의 콜백 함수 세계를 여행했습니다. 콜백은 여러분의 프로그래밍 모험에서 언제나 신뢰할 수 있는 동반자입니다. 콜백을 연습하고, 곧 프로처럼 콜백을 사용할 수 있을 것입니다!
Credits: Image by storyset