Menu
Coddy logo textTech

함수를 인자로 전달하기

Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 36번째.

함수 포인터의 가장 강력한 활용 방법 중 하나는 함수 포인터를 다른 함수에 인수로 전달하는 것입니다. 이를 통해 해당 함수의 코드를 수정하지 않고도 사용자 지정 동작을 주입할 수 있습니다. 이 기법은 때때로 콜백이라고 합니다.

두 숫자에 대해 계산을 수행하는 함수를 생각해 보세요. 연산을 하드코딩하는 대신, 수행할 연산을 정의하는 함수 포인터를 받을 수 있습니다:

typedef int (*Operation)(int, int);

int compute(int a, int b, Operation op) {
    return op(a, b);
}

compute 함수는 덧셈을 하는지, 뺄셈을 하는지, 아니면 전혀 다른 작업을 하는지 알지 못합니다. 단순히 자신에게 전달된 함수를 호출할 뿐입니다:

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

int main() {
    printf("%d\n", compute(5, 3, add));       // 출력: 8
    printf("%d\n", compute(5, 3, multiply));  // 출력: 15
    return 0;
}

어떤 함수를 전달하느냐에 따라 동일한 compute 함수가 서로 다른 결과를 생성하는 점에 주목하세요. 이 패턴은 유연하고 재사용 가능한 코드를 작성하는 데 기본이 됩니다. 구조는 한 번 작성하고, 함수를 사용하는 사람은 필요한 구체적인 로직을 제공합니다.

challenge icon

챌린지

쉬움

두 정수와 연산 코드를 받아 연산을 두 번 연속으로 숫자에 적용하고 최종 결과를 반환하는 apply_twice 함수를 작성하세요.

함수는 사용할 연산을 결정하는 연산 코드를 받습니다. 풀이 내부에 연산 함수들을 정의하고, 함수 포인터를 받는 도우미 compute 함수에 전달해야 합니다.

참고: 함수만 필요합니다. 테스트에서는 apply_twice를 직접 호출하고 반환값을 확인하므로, 입력을 읽거나 무엇인가를 출력하지 마세요.

필수 구조:

  • 두 개의 int 매개변수를 받고 int를 반환하는 함수 포인터에 대해 Operation이라는 typedef를 정의하세요.
  • 두 연산 함수를 정의하세요: add (a + b를 반환) 및 multiply (a * b를 반환)
  • 두 정수와 Operation 함수 포인터를 받고, 해당 연산을 호출한 결과를 반환하는 compute 함수를 정의하세요.
  • apply_twice에서 코드에 따라 적절한 연산을 선택한 다음 compute를 두 번 사용하세요. 처음에는 원래 숫자를 사용하고, 다음에는 결과와 두 번째 숫자를 다시 사용합니다.

로직:

  1. op_code에 따라 연산 함수를 선택합니다 (1 = add, 2 = multiply).
  2. compute(a, b, operation)을 호출하여 중간 결과를 얻습니다.
  3. compute(intermediate, b, operation)을 호출하여 최종 결과를 얻습니다.
  4. 최종 결과를 반환합니다.

매개변수:

  • a (int): 첫 번째 숫자
  • b (int): 두 번째 숫자
  • op_code (int): 연산 코드 (add의 경우 1, multiply의 경우 2)

반환값: 연산을 두 번 연속으로 적용한 후의 결과 (int)

예시: a = 5, b = 3, op_code = 1 (add)인 경우:

  • 첫 번째 계산: 5 + 3 = 8
  • 두 번째 계산: 8 + 3 = 11
  • 반환: 11

a = 2, b = 4, op_code = 2 (multiply)인 경우:

  • 첫 번째 계산: 2 × 4 = 8
  • 두 번째 계산: 8 × 4 = 32
  • 반환: 32

직접 해보기

int apply_twice(int a, int b, int op_code) {
    // 여기에 코드를 작성하세요
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러