더북(TheBook)

메서드의 매개변수로 람다 식 전달

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와 확장 메서드는 대리자 개념을 사용하여 함수형 프로그래밍 스타일로 코드를 작성할 수 있도록 도와줍니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.