C#에서 Func 제네릭 타입은 익명 메서드(anonymous method)나 람다 식을 저장할 수 있는 매개변수화 타입입니다. Func 델리게이트는 하나 이상의 입력 매개변수를 받아 마지막 제네릭 매개변수에 지정된 형식의 값을 반환하며, 최대 16개의 입력 매개변수까지 지원합니다.
아래 예제에서는 총 4개의 Func 타입 인스턴스를 선언하고 있습니다.
1. int를 받아 string을 반환하는 Func
Func<int, string> one = (p) => string.Format("{0}", p);2. bool과 long을 받아 string을 반환하는 Func
Func<bool, long, string> two = (q, p) => string.Format("{0} and {1}", q, p);3. bool과 int를 받아 string을 반환하는 Func
Func<bool, int, string> three = (q, p) => string.Format("{0} and {1}", q, p);4. decimal을 받아 string을 반환하는 Func
Func<decimal, string> four = (p) => string.Format("{0}", p);이렇게 선언한 Func 인스턴스는 Invoke() 메서드를 통해 실행할 수 있습니다. 실제 동작 과정을 전체 코드로 확인해 보겠습니다.
예제 코드
using System;
using System.IO;
namespace Demo {
class Program {
static void Main(string[] args) {
// 4개의 Func 타입 인스턴스
// 첫 번째 타입: int를 받아 string 반환
Func<int, string> one = (p) =>
string.Format("{0}", p);
// 두 번째 타입: bool과 long을 받아 string 반환
Func<bool, long, string> two = (q, p) =>
string.Format("{0} and {1}", q, p);
// 세 번째 타입: bool과 int를 받아 string 반환
Func<bool, int, string> three = (q, p) =>
string.Format("{0} and {1}", q, p);
// 네 번째 타입: decimal을 받아 string 반환
Func<decimal, string> four = (p) =>
string.Format("{0}", p);
Console.WriteLine(one.Invoke(25));
Console.WriteLine(two.Invoke(false, 76756566));
Console.WriteLine(three.Invoke(true, 50));
Console.WriteLine(four.Invoke(1.2m));
}
}
}
실행 결과
25
False and 76756566
True and 50
1.2
핵심 포인트 정리
- Func 델리게이트의 마지막 타입 매개변수가 항상 반환 타입입니다. 예를 들어
Func<bool, int, string>은 bool과 int 두 개의 입력을 받아 string을 반환합니다. - 람다 식 대신 기존 메서드 이름을 할당하거나,
Invoke()없이 변수를 메서드처럼 직접 호출할 수도 있습니다. - 반환값이 없는 경우에는 Action 델리게이트를 사용하는 것이 적합합니다.