문제 제기:
C-Style의 콜백 구조는 C++ 프로그래밍에서 큰 문제를 일으킨다. 그 문제는 콜백 함수의 인자로 들어가는 함수 포인터에는 ‘클래스 멤버 함수’는 들어갈 수가 없다는 점이다.
보통 이러한 문제를 해결하기 위해 아예 일반 함수 콜백에 전역변수를 사용하곤 한다. 하지만, 이러한 해결은 많은 결점을 낳는다. 프로그램이 점점 작성될 수록 매우 프로그래밍하기 불편한 구조로 되어 버리기 때문이다.
그 하나의 예로 GLUT를 이용한 프로그래밍을 들 수 있다. GLUT는 매우 사용하기 간결하고 편리하지만, 콜백 함수가 전형적인 ‘C-Style’이라 프로그램에 필요한 데이터가 전역변수로 저장되는 경우가 빈번한데, 이런 형태로 조금만 프로그램이 커져버리면 혼란스러운 전역 변수의 범벅에서 길을 잃어버리는 경우가 허다하다.
진땀을 흘려가며 전역 변수 투성이 코드를 디버깅하며 ‘클래스를 사용할 수 있으면 참 좋을텐데’ 라고 생각해 본 적이 있는가? 그렇다면 ‘클래스 (혹은 구조체)’를 사용하면서도 C-Style의 콜백을 이용하려면 어떻게 해야 할까? 이 포스트는 그러한 방법에 대해 서술하고자 한다.