[C#] Func & Action

Flaming Bun·2025년 4월 24일

C#

목록 보기
17/35

참고 영상: https://www.youtube.com/watch?v=4TNW8qm5Mks&list=PLVsNizTWUw7GN8wPRhclbKuQa9aI9Cj2V&index=15

🔥 Func와 Action

Func와 Action은 .NET 라이브러리에 사전 정의되어 있는 제네릭 형식의 대리자이다.

Func와 Action은 일반화와 최대 16개 매개변수를 지원 즉 16개의 오버로딩이 돼 있다.

Func와 Action은 제네릭 형식으로 미리 정의되어 있어 매개변수와 반환 타입을 간결하게 표현할 수 있다.

익명 메소드/무명 함수 정의를 위해 매번 대리자를 새롭게 정의하지 않아도 된다.

Func

Func는 반환 값이 있는 메서드의 델리게이트마지막 제네릭 형식 매개변수는 반환 타입을 나타낸다.

ex) public delegate TResult Func<out TResult>()
// out TResult -- 마지막 매개 변수는 출력 매개 변수다.
public delegate TResult Func<in T, out TResult>(T arg)
public delegate TResult Func<in T1, in T2, out TResult>(T1, arg1, T2 arg2)
public delegate TResult Func<in T1, in T2, in T3, out TResult>(T1 arg1, T2 arg2, T3 arg3)
. . .
public delegate TResult Func<int T1, in T2, in T3, ... , in T15, in T16, out TResult>(T1 arg1, T2 arg2, T3 arg3, ..., T15 arg15, T16 arg16)

// Func<반환형식>
Func<int> func1 = () => 10; // 입력 매개 변수는 없으며, 무조건 10을 반환
Console.WriteLine(func1()); // 10을 출력

// Func<입력형식, 반환형식>
Func<int, int> func2 = (x) => x*2; // 입력 매개 변수는 int 형식 하나, 반환 형식도 int
Console.WriteLine( func2(3) ); // 6을 출력

Action

Action은 반환 값이 없는 메서드의 델리게이트로 Action은 매개변수를 받아들이지만, 반환 타입이 없다.

ex) public delegate void Action<>()
public delegate void Action(T arg)
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2)
...
public delegate void Action<in T1, in T2, ..., in T15, in T16>(T1 arg1, T2 arg2, ..., T15 arg15, T16 arg16)

Action act1 = () => Console.WriteLine(Action());

act1(); // Action() 출력

Action<double, double> act3 = (x, y) =>
{
    double pi = x/ y;
    Console.WriteLine(Action<T1, T2>({0}, {1}) : {2}, x, y, pi);
};
  
act(22.0, 7.0); // Action<T1, T2>(22.0, 7.0) : 3.14.. 출력

0개의 댓글