기존에 작성한 자료구조 과제 코드를 인터페이스 - 추상 자료형을 이용하여 재사용 가능한 형태로 수정하던 중, 함수 포인터를 사용할 필요성이 생겨 복습한 내용이다
함수 역시 주소를 가지고 있다. 함수는 프로그램 코드가 존재하는 text segment에 존재하는데, 함수를 호출할 때마다 이 위치의 함수 코드가 불려져서 실행된다
함수의 식별자는 그 자체로 함수에 대한 포인터와 같다. 함수 포인터는 이러한 식별자를 대입해, 함수의 주소를 받아오는 것이다
void func
{
return;
}
int main()
{
void (*pf1)() = func;
return 0;
}
위의 예제코드와 같은 형태로 함수 포인터를 선언하고 초기화할 수 있다. 이때 함수 포인터는 대입하려는 함수와 같은 인자, 반환값을 가지고 있어야 한다.
이 함수 포인터를 이용하면 함수를 call 할 수도 있다.
인터페이스를 이용한 리팩토링을 할 때 함수 포인터를 사용하는 방법은 아래와 같다.
기본적인 기능 (삽입, 삭제, 수정, 출력 등) 은 인터페이스와 구현으로 분리하고, 이를 실제 사용할 때는 기본적인 기능 내에서 사용하고 있는 자료구조에 맞게 함수 포인터로 부가 기능을 받아온다. 이를 이용하면 재사용 가능한 코드를 만들 수 있다.
반성
오늘 리팩토링도 하고 개강 대비한 과제를 미리 해서 정리할 내용이 적은 것도 있지만, 11시가 될 때까지 TIL 정리를 미루다가 급하게 정리를 마무리한 탓도 있다. 미리 행동하고 조금 더 공부하자. 단, 의무감에 공부하지 말자. 하루에 기본적으로 최소한의 공부는 의무적으로 하되, 나머지 공부는 자연스럽게 즐기면서 하자. 그러나 TIL 습관은 잘 지키자.