메서드의 매개변수로 람다 식 전달
Calc() 메서드의 마지막 매개변수에 Func<T> 형태로 람다 식을 전달하여 더하기 또는 곱하기를 구현한 예제입니다.
> void Calc(int x, int y, Func<int, int, int> calc) => Console.WriteLine(calc(x, y)); > Calc(3, 5, (x, y) => x + y); 8 > Calc(3, 5, (x, y) => x * y); 15
Note ≡ Expression<T>
닷넷에는 Func<T> 이외에 Expression<T> 클래스도 제공합니다. Func<T>는 바로 실행 가능한 대리자 개체를 생성하는 대신에 Expression<T>는 대리자 구문 자체를 담은 개체를 만들고, 이를 사용하려면 Compile() 같은 추가 메서드를 호출하여 대리자 개체를 만듭니다.
Expression<T> 클래스는 Expression Tree 개념으로 이 책의 범위를 벗어납니다. 다음 내용을 C# 인터렉티브에서 한 번 정도 실행해 보고 넘어가세요.
> Func<int, bool> isBig = i => i > 5; > isBig(10) true > Expression<Func<int, bool>> expression = i => i > 5; > var isBigOther = expression.Compile(); > isBigOther(10) true
대리자와 Func 제네릭 대리자를 사용하면 메서드 참조를 가지는 새로운 개체를 만들고, 메서드의 매개변수에 메서드 자체를 전달할 수 있습니다. 앞에서 사용한 LINQ와 확장 메서드는 대리자 개념을 사용하여 함수형 프로그래밍 스타일로 코드를 작성할 수 있도록 도와줍니다.