티스토리 뷰

일단 C/C++ 에서 함수포인터는 숫자변수와 비슷하게 취급이 된다는 점을 이해를 하고 있어야 한다.


1. CallBack함수류

- 가장 간단한 함수포인터 사용예

- CallBack함수를 등록 받는 쪽과 등록 하는 쪽의 소스코드에서 상호간에 함수명을 필요가 없는 자유를 준다.

- 따라서 CallBack함수를 붙였다가 땠다가 할 수 있다.

Ex) CallBack함수 등록 테이블의 값이 0이면 콜백함수가 없구나 하고 넘어가면 되므로.


2. Parsing 로직에서의 함수 포인터 배열

- 통신 관련 프로그래밍을 하다가 보면 특정 옵션 값에 따라서 호출하는 함수가 다양하게 전개되는 경우가 있다.

Ex) 옵션값을 배열 Index로 삼고 함수 포인터 배열을 접근하면 소스코드도 간결 해 지고 실행속도도 빨라 진다.


3. 이벤트 핸들러

- 콜백함수의 집합체라고 이해를 하면 빠를 수도 있는데...

- 동적으로 늘어 나거나 줄어드는 UI에 의해서 이벤트 핸들러를 붙였다가 땠다가 해야 할 경우 이것을 효율적으로 관리하기 위해서는 함수 포인터 만한 것이 없다.

Ex) 윈도우즈 프로그램에서 하나의 프로그램에 수많은 버튼들과 Child Windows들이 생성되는데 각각의 Object로 마우스 클릭 이벤트라든가 키보드 이벤트 등을 분배 한다고 할 때 IF ELSE나 Switch문으로는 답이 안나온다. 특히 Child Windows들이 생겼다가 없어졌다가 할 경우는 더더욱 ... 이럴 때 Parent에서는 이벤트 핸들러를 등록 받고 관리하는 함수만 코딩을 한 후 그 테이블을 보고 해당 이벤트 발생시 해당 핸들 넘버와 일치하거나 Index로 이벤트 핸들러를 호출하면 편하다.

- 윈도우즈 프로그래밍을 하는 경우, 함수 포인터의 기반하에 프로그래밍을 하기 때문에 함수 포인터를 어디에 쓸까 의문을 가지게 된다. 하지만 윈도우즈의 전과정을 줄여 놓은 듯한 RTOS나 임베디드 프로그래밍을 하는 경우 그 코드들을 직접 접하게 되거나 코딩을 해야 하는 경우가 많다.


4. 수직 Layer간의 동적연결

- 이벤트 핸들러와 거의 유사한데, OSI 7 Layer상의 계층별 프로그래밍을 해야 할 때 레이어들 사이에는 동적으로 Bind되었다가 Detach되거나 한다. 전 Layer를 하나의 프로젝트에서 만들거나 동일한 프로그래머가 프로그래밍을 할 때는 계층들을 명시적으로 관리를 할 수 있겠지만 그렇지 않을 경우는 계층별로 추상화를 시키고 동적으로 연결을 관리를 해야만 한다. 이 때 함수 포인터가 사용 된다.


5. 이종 언어간의 I/F

- 라이브러리는 어셈블리로 짜고 호출하는 함수는 C등으로 짤 때는 당연히 포인터로 함수를 호출 할 수 밖에 없다.

- 각종 DLL호출이나 OCX등도 비슷하다라고 할 수 있다.



'Development > C/C++' 카테고리의 다른 글

코딩 스타일  (0) 2016.09.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
글 보관함
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30