함수 포인터를 이용한 간단한 콜백 메커니즘


어떤 기능이나 서비스를 제공하는 코드 측을 서버라 한다.

그 기능을 제공받는 코드 측을 클라이언트라 한다.


/////////////////서버

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

+ Recent posts