함수 포인터를 이용한 간단한 콜백 메커니즘
어떤 기능이나 서비스를 제공하는 코드 측을 서버라 한다.
그 기능을 제공받는 코드 측을 클라이언트라 한다.
/////////////////서버
void print(){
cout<<"Hello"<<endl;
}
////////////////클라이언트
int main(){
print();
}
print()는 출력 기능을 제공 하니까 서버
main()은 print()함수를 호출해서
출력 기능을 제공받으니까 클라이언트
![]()
클라이언트 측에서 서버를 호출하고 기능을 사용하지만
때때로 서버가 클라이언트를 호출해야 하는 경우가 있다.
클라이언트가 서버를 호출하면 콜(call)
서버가 클라이언트를 호출하면 콜백(callback)이라 한다.
![]()
void print(){
client();
--> 콜백
--> 서버에서 클라이언트 함수를 호출
}
void client() { ... }
int main(){
print();
-->콜
}
![]()
간단한 콜백 메커니즘이다.
하지만 서버가 실제 이럴수는 없다.
클라이언트가 어떤 함수를 가지고
있는지 알 수 없기 때문이다.
![]()
따라서 콜백 메커니즘을 구현하려면 클라이언트 정보를
서버에 제공을 해야하는데 그 방법 중 하나가
함수 포인터 매개변수를 이용해 콜백 함수의 주소를 전달 하는 방법이다.
서버는 배열의 원소에 대해 반복적인 작업을 수행할 뿐
고체적인 작업은 알지 못한다. 구체적인 작업은
클라이언트에서 콜백 함수를 이용해 수행.
![]()
콜백 메커니즘을 이용하면 알고리즘 정책을
클라이언트에서 유연하게 바꿀 수 있게 서버를
더욱 추상화할 수 있다. 또한 대부분 GUI의 강력한
이벤트 기능도 콜백 메커니즘으로 구현된다.
![]()
또한 지금부터 공부하게 될 STL의 많은 알고리즘도
콜백을 이용해 클라이언트 정책을 반영한다.
따라서 함수 포인터를 이용한 콜백 메커니즘을 꼭 기억하자.
'C++' 카테고리의 다른 글
| [C++] static_cast , dynamic_cast (0) | 2016.12.27 |
|---|---|
| [C++ STL] STL에 필요한 템플릿 예제 (0) | 2016.12.21 |
| [C++ STL] 연산자 오버로딩 (0) | 2016.12.19 |
| [C++] 전방 선언 (0) | 2016.12.19 |
| [C++] 팩토리 함수 (0) | 2016.12.19 |