📒 갈무리 - 람다식(Lambda), Action & Func
📌 람다식이란?
- 익명 메소드를 의미한다.
- 메소드와 동일하게 파라미터와 리턴이 존재한다.
- 파라미터 타입을 명시해도 되고, 하지 않아도 된다.
- return을 명시해도 되고, 하지 않아도 되지만 명시할 것이라면 {}로 감싸주어야 한다.
- 리스트 함수 중 delegate 파라미터로 활용된다.
- Collections에서 다양하게 활용된다.
delegate int CountDelegate(int number);
CountDelegate count = (number) => { return number + number; };
📌 delegate의 람다식 활용
List<int> dataList = new List<int> { 1, 2, 3, 4, 5 };
List<int> findAllList = dataList.FindAll((num) => { return num < 3; });
Console.WriteLine("3보다 작은 수");
foreach (var number in findAllList)
{
Console.WriteLine(number);
}
int findNum = dataList.Find((num) => num % 2 == 0);
Console.WriteLine("짝수 : " + findNum);
Output:
3보다 작은 수
1
2
짝수 : 2
📌 함수의 람다식 활용
delegate void printDelegate(string message);
delegate void funcDeleaget();
class Program
{
public static void Call(string message)
{
Console.WriteLine(message);
}
public static void CallBack(printDelegate dp, string message)
{
if (dp != null)
{
dp("Call Back : " + message);
}
}
static void Main(string[] args)
{
CallBack(Call, "Hello 1");
CallBack(delegate (string message) { Console.WriteLine(message); }, "Hello 2");
CallBack((string message) => Console.WriteLine(message), "Hello 3");
CallBack(message => Console.WriteLine(message), "Hello 4");
funcDeleaget fd = () => Console.WriteLine("Hello 5");
}
}
📌 Action
- 리턴값이 없는 delegate를 미리 선언해 둔 것
- 파라미터를 최대 16개까지 받을 수 있는 Action들이 구현되어 있다.
static void CallAction()
{
Console.WriteLine("CallAction");
}
static void Main(string[] args)
{
Action func1;
Action<int> func2;
Action<float, int> func3;
func1 = CallAction;
func2 = (num) => Console.WriteLine("num : " + num);
func3 = (a, b) =>
{
float result = b / a;
Console.WriteLine($"a : {a}, b : {b}, result : {result}");
};
func1();
func2(100);
func3(6.0f, 10);
}
📌 Func
- 리턴값이 있는 delegate를 미리 선언해 둔 것
- <>안에 마지막 타입이 리턴 타입이 된다.
static int CallFunc()
{
return 100;
}
static void Main(string[] args)
{
Func<int> func1;
Func<int, float> func2;
Func<int, int, int> func3;
func1 = CallFunc;
func2 = number => (float)(number / 2.0f);
func3 = (a, b) => a + b;
Console.WriteLine("func1 : "+ func1());
Console.WriteLine("func2 : "+ func2(10));
Console.WriteLine("func3 : "+ func3(100, 150));
}
💡 TIP
delegate를 통해서 작업을 할 때, 사용하려는 형태의 Action이나 Func가 있는지 고민해 보자.