115. 함수 포인터와 콜백 개요

컴퓨터 프로그램은 수행할 작업들을 논리적으로 표현한 코드의 집합이라고 말할 수 있어요.
그리고 단위 작업의 논리 전개를 한 것이 함수죠.
컴퓨터 CPU내에는 현재 수행할 코드 메모리 주소를 기억하는 프로그램 카운터(PC) 레지스터가 있어요.
대부분의 코드는 수행한 후에 프로그래머 카운터를 1 증가하여 다음 위치에 있는 코드를 수행하죠.
하지만 함수를 호출하면 피호출 함수의 코드로 분기하고 끝나면 호출한 코드 다음 위치에 있는 코드가 동작해요.

이렇게 동작할 수 있는 이유는 함수 이름은 해당 함수가 수행할 코드의 시작 메모리 주소를 값으로 갖고 있기 때문이예요.
배열명이 원소 형식의 포인터라고 말하는 것처럼 함수명은 해당 함수의 시작 메모리 주소를 의미하여 함수 포인터라 부르죠.

함수 포인터는 피호출 함수에서 대부분의 논리를 구현할 수 있지만 일부 논리를 호출하는 곳에서 결정할 필요가 있을 때 입력 매개 변수로 사용하는 등의 작업에서 사용할 수 있어요.
응용 프로그램은 시스템을 사용하기 위해 일반적으로 시스템을 호출하죠.
하지만 특정 사건이 발생하는 것을 운영체제에 위임하게 하고 특정 사건이 발생하는 것을 통보해 주게 설정할 수 있어요.
그리고 사건이 발생하면 운영체제는 응용에서 설정한 함수를 호출하게 할 수 있어요.
이 때 운영체제에 설정한 함수를 운영체제가 호출하는 것은 일반적인 호출 방향의 역방향이어서 콜백이라 불러요.
응용 프로그램 내부에서도 함수 포인터를 사용하면 이러한 콜백 원리를 이용할 수 있어요.

이번 장에서는 이러한 함수 포인터와 콜백이 무엇인지 기본적인 내용을 다룰게요.