콜백 함수
함수도 주소가 있다.
함수 주소값을 다른 모듈에 넘겨주고 필요한 경우 호출하도록 할 수 있다.
callback.c
디버그 모드 일때만 로그를 출력하는 프로그램
#include <stdio.h>
#include <string.h>
typedef void (*prototype_callback_log)(const char * message);
static void s_callback_log_verbose(const char * message) {
printf("LOG: %s\n", message);
}
static void s_callback_log_silent(const char * message) {
// do nothing
}
static void s_run(prototype_callback_log log) {
log("Program Begin");
log("Program End");
}
int main(int argc, char * args[]){
prototype_callback_log log;
if (argc > 1 && !strcmp(args[1], "debug")) {
printf(" == DEBUG MODE ==\n");
log = s_callback_log_verbose;
} else {
printf(" == RELEASE MODE ==\n");
log = s_callback_log_silent;
}
s_run(log);
return 0;
}
실행:
$ ./callback
== RELEASE MODE ==
$ ./callback debug
== DEBUG MODE ==
LOG: Program Begin
LOG: Program End
Interface
위 예제의 함수 prototype 부분을 헤더 파일로 이동하여 프로젝트 전반에 걸쳐 공유할 수 있다.
여러 모듈간 데이터가 오가는 경우 미리 함수 prototype 을 지정하게 되면 각자 모듈을 구현하는데 고민할 부분이 한정되어 충돌없이 동시에 각자의 모듈을 구현할 수 있다.
Interface 라는 말은 함수 prototype 만을 지칭하는 용어는 아니고 미리 통신 방식이나 주고 받을 데이터 규약을 통칭한다.
Interface 를 정의할 때는 간략하고 필요한 데이터만 정의하도록 한다.
충분한 구현 경험이나 이해없이 좋은 interface 를 정하기는 어렵다.
결과물에 대한 그림이 머리속에 그려질 수 있어야 한다.
여러 모듈간 데이터가 오가는 경우 미리 함수 prototype 을 지정하게 되면 각자 모듈을 구현하는데 고민할 부분이 한정되어 충돌없이 동시에 각자의 모듈을 구현할 수 있다.
Interface 라는 말은 함수 prototype 만을 지칭하는 용어는 아니고 미리 통신 방식이나 주고 받을 데이터 규약을 통칭한다.
Interface 를 정의할 때는 간략하고 필요한 데이터만 정의하도록 한다.
충분한 구현 경험이나 이해없이 좋은 interface 를 정하기는 어렵다.
결과물에 대한 그림이 머리속에 그려질 수 있어야 한다.
댓글 없음:
댓글 쓰기