C#/프로그래밍 고급
C# 프로그래밍 고급 - 08. 델리게이터 종류
tita
2024. 5. 30. 16:54
자주 사용되는 .NET에서 제공되는 델리게이터가 있습니다. Func 델리게이터와 Action 델리게이터에 대해 알아보겠습니다
[Func 델리게이터]
Func 델리게이터는 .NET에서 제공하는 일반 델리게이터로, 입력 매개변수를 받아 결과를 반환하는 메서드를 참조할 수 있도록 합니다.
Func 델리게이터는 0개부터 16개까지의 입력 매개변수를 받을 수 있으며, 마지막 형식 매개변수는 항상 반환 형식을 나타냅니다.
<Func 델리게이터의 기본 형태>
- Func<TResult>: 매개변수가 없고, TResult를 반환합니다.
- Func<T1, TResult>: 하나의 매개변수 T1을 받고, TResult를 반환합니다.
- Func<T1, T2, TResult>: 두 개의 매개변수 T1과 T2를 받고, TResult를 반환합니다.
- ...
- Func<T1, ..., T16, TResult>: 최대 16개의 매개변수를 받고, TResult를 반환합니다.
<매개변수가 없는 Func>
using System;
class Program
{
static void Main(string[] args)
{
// Func 델리게이터: 매개변수가 없고 int를 반환
Func<int> getRandomNumber = () => new Random().Next(1, 101);
// 람다식을 호출하여 결과 출력
int result = getRandomNumber();
Console.WriteLine(result); // 출력: 1부터 100 사이의 임의의 숫자
}
}
<매개변수가 하나인 Func>
using System;
class Program
{
static void Main(string[] args)
{
// Func 델리게이터: string을 받아 int를 반환
Func<string, int> getLength = str => str.Length;
// 람다식을 호출하여 결과 출력
int length = getLength("Hello, World!");
Console.WriteLine(length);
}
}
/*
[실행 결과]
13
*/
<매개변수가 두 개인 Func>
using System;
class Program
{
static void Main(string[] args)
{
// Func 델리게이터: 두 개의 int를 받아 int를 반환
Func<int, int, int> add = (a, b) => a + b;
// 람다식을 호출하여 결과 출력
int result = add(3, 4);
Console.WriteLine(result); // 출력: 7
}
}
/*
[실행 결과]
7
*/
Func 델리게이터를 정리해보면
- Func 델리게이터는 하나 이상의 입력 매개변수를 받고, 결과를 반환하는 메서드를 참조할 수 있습니다.
- 마지막 형식 매개변수는 반환 형식을 나타내며, 최대 16개의 입력 매개변수를 가질 수 있습니다.
- 사용 예제: Func 델리게이터는 다양한 입력 매개변수와 반환 형식을 가진 메서드를 람다식이나 메서드 참조로 간결하게 표현할 수 있도록 합니다.
[Action 델리게이터]
Action 델리게이터는 .NET에서 제공하는 델리게이터로, 매개변수를 받지 않고 반환값이 없는 메서드를 참조할 수 있도록 합니다. 즉, Action 델리게이터는 입력 매개변수를 받지 않고 void를 반환하는 메서드를 참조할 수 있습니다.
<Action 델리게이터의 기본 형태>
- Action: 매개변수가 없고, 반환값이 없는 메서드를 참조합니다.
- Action<T1>: 하나의 매개변수 T1를 받고, 반환값이 없는 메서드를 참조합니다.
- Action<T1, T2>: 두 개의 매개변수 T1과 T2를 받고, 반환값이 없는 메서드를 참조합니다.
- ...
- Action<T1, ..., T16>: 최대 16개의 매개변수를 받고, 반환값이 없는 메서드를 참조합니다.
<매개변수가 없는 Action>
using System;
class Program
{
static void Main(string[] args)
{
// Action 델리게이터: 매개변수가 없는 메서드를 참조
Action sayHello = () => Console.WriteLine("Hello, World!");
// 메서드 호출
sayHello();
}
}
/*
[실행 결과]
Hello, World!
*/
<매개변수가 하나인 Action>
using System;
class Program
{
static void Main(string[] args)
{
// Action 델리게이터: int를 받는 메서드를 참조
Action<int> printNumber = num => Console.WriteLine(num);
// 메서드 호출
printNumber(10);
}
}
/*
[실행 결과]
10
*/
<매개변수가 두 개인 Action>
using System;
class Program
{
static void Main(string[] args)
{
// Action 델리게이터: 두 개의 int를 받는 메서드를 참조
Action<int, int> calculateSum = (a, b) => Console.WriteLine("Sum: " + (a + b));
// 메서드 호출
calculateSum(3, 4);
}
}
/*
[실행 결과]
7
*/
Action 델리게이터를 정리해보면
- Action 델리게이터는 매개변수를 받지 않고 반환값이 없는 메서드를 참조할 수 있습니다.
- 매개변수의 개수에 따라 다양한 형태의 Action 델리게이터를 사용할 수 있습니다.
- 사용 예제: Action 델리게이터는 주로 콜백 메서드, 이벤트 핸들러, 비동기 작업 등에서 사용됩니다.
[Func 델리게이터와 Action 델리게이터의 차이점]
- Func 델리게이터는 반환 값을 가지며, Action 델리게이터는 반환 값을 가지지 않습니다.
- 두 델리게이터 모두 메서드의 매개변수를 나타내지만, Action은 반환형이 없는 메서드를 참조할 때 사용됩니다.
- 따라서, Func는 반환형을 지정할 때 사용하고, Action은 반환형이 없는 경우에 사용됩니다.