[c언어] 함수 포인터와 구조체

이번에는 C언어에서 함수 포인터구조체를 함께 사용하는 방법에 대해 살펴보겠습니다. 이 두 가지 요소를 함께 활용하면 더 유연하고 강력한 코드를 작성할 수 있습니다.

함수 포인터

C언어에서 함수 포인터는 함수를 가리키는 포인터입니다. 함수 포인터를 사용하면 런타임에 어떤 함수를 호출할지 결정할 수 있으며, 이는 동적으로 함수를 선택하고 호출할 수 있다는 장점을 가집니다.

함수 포인터를 선언하는 방법은 다음과 같습니다.

// 함수 포인터 선언
int (*funcPtr)(int, int);

위의 예제에서 funcPtr은 두 개의 int형 인자를 받아 int형 값을 반환하는 함수를 가리키는 포인터입니다.

함수 포인터를 이용하여 함수를 호출할 때는 다음과 같이 사용합니다.

// 함수 포인터를 이용한 함수 호출
int result = (*funcPtr)(5, 3);

함수 포인터를 사용하면 다른 함수를 가리키게 변경할 수 있으므로, 유연한 코드를 작성할 수 있습니다.

구조체

구조체는 C언어에서 여러 개의 변수를 묶어 하나의 새로운 자료형을 정의하는데 사용됩니다. 구조체를 사용하면 여러 데이터를 묶어 하나의 단위로 관리할 수 있으며, 이는 코드의 가독성을 높여주고 유지보수를 용이하게 합니다.

구조체를 선언하는 방법은 다음과 같습니다.

// 구조체 선언
struct Point {
    int x;
    int y;
};

위의 예제에서 Point 구조체는 xy라는 두 개의 int형 멤버를 갖습니다.

함수 포인터와 구조체의 결합

이제 함수 포인터와 구조체를 함께 사용하여 좀 더 복잡한 예제를 살펴보겠습니다. 다음은 구조체와 함수 포인터를 함께 사용하는 예제 코드입니다.

#include <stdio.h>

struct MathOperation {
    int (*operation)(int, int);
};

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int main() {
    struct MathOperation mathOp;

    mathOp.operation = add;
    printf("Result of addition: %d\n", mathOp.operation(5, 3));

    mathOp.operation = subtract;
    printf("Result of subtraction: %d\n", mathOp.operation(5, 3));

    return 0;
}

위의 예제에서 MathOperation 구조체는 operation이라는 함수 포인터 멤버를 가지고 있습니다. main 함수에서 mathOp.operationadd 함수와 subtract 함수를 차례로 할당하여 호출하고 있습니다.

이처럼 함수 포인터와 구조체를 결합하여 함수를 동적으로 선택하는 기능을 구현할 수 있습니다.

함수 포인터와 구조체는 C언어에서 강력하고 유연한 프로그래밍을 위한 강력한 기능입니다.

참고 자료

C언어에서 함수 포인터와 구조체를 함께 사용하는 방법에 대해 알아보았습니다. 이러한 기능을 적절히 활용하면 OOP(객체 지향 프로그래밍)처럼 보다 유연하고 모듈화된 코드를 작성할 수 있습니다.