[c#] 람다식을 사용하여 어떻게 고차 함수를 구현할 수 있나요?

고차 함수(higher-order function)는 다른 함수를 매개변수로 받거나 함수를 반환하는 함수를 말합니다. C#에서는 람다식을 사용하여 고차 함수를 구현할 수 있습니다.

매개변수로 함수 전달하기

using System;

public class HigherOrderFunctionExample
{
    public static void PerformOperation(int x, int y, Func<int, int, int> operation)
    {
        int result = operation(x, y);
        Console.WriteLine(result);
    }

    public static void Main()
    {
        PerformOperation(5, 3, (a, b) => a + b); // 8 출력
        PerformOperation(5, 3, (a, b) => a * b); // 15 출력
    }
}

위 예제에서 PerformOperation 메서드는 Func<int, int, int> 타입의 매개변수를 받아들이는데, 이는 두 개의 정수를 인자로 받고 정수를 반환하는 함수를 나타냅니다. Main 메서드에서 람다식을 사용하여 PerformOperation을 호출할 때 ‘+’와 ‘*’ 연산을 수행하는 함수를 전달했습니다.

함수를 반환하기

using System;

public class HigherOrderFunctionExample
{
    public static Func<int, int, int> GetOperation(char operation)
    {
        switch (operation)
        {
            case '+':
                return (a, b) => a + b;
            case '*':
                return (a, b) => a * b;
            default:
                throw new ArgumentException("Unsupported operation");
        }
    }

    public static void Main()
    {
        Func<int, int, int> addFunction = GetOperation('+');
        Console.WriteLine(addFunction(5, 3)); // 8 출력

        Func<int, int, int> multiplyFunction = GetOperation('*');
        Console.WriteLine(multiplyFunction(5, 3)); // 15 출력
    }
}

위 예제에서 GetOperation 메서드는 입력된 연산에 따라 덧셈 또는 곱셈을 수행하는 함수를 반환합니다. Main 메서드에서 반환된 함수를 사용하여 각각의 연산을 수행했습니다.

이와 같이 C#에서는 람다식을 사용하여 고차 함수를 구현할 수 있습니다.

참고 자료