티스토리 뷰
일단 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
- 이클립스
- 풍경사진
- streamReader
- 초기설정
- NonBlocking
- c#
- Eclipse
- Nikon
- Programing
- filepath
- 싱글스레드
- 함수포인터
- 낙엽거리축제
- Nikon D5500
- 자바
- C/C++
- 멀티쓰레드
- 낙엽축제
- synchronous
- 월지
- 야경
- GarbageCollection
- Java
- Spring
- D5500
- 논블로킹
- FunctionPointer
- 야경사진
- csv
- 풍경