람다식은 익명 메소드를 만드는 하나의 방법이다.
람다식으로 만드는 익명 메소드는 무명 함수(Anonymous Function)라는 이름으로 부른다.
람다식 또한 메소드와 마찬가지로 Parameter와 Return값을 가진다.
매개변수_목록 => 식
람다식에서 매개변수는 왼쪽에, 식은 오른쪽에 위치한다.
//예시
delegate int Calculate(int a, int b) //익명 메소드를 만들기 위한 delegate
static void main(string[] args)
{
Calculate calc = (int a, int b) => a+b;
//C# 컴파일러는 Type Inference(형식 유추) 라는 기능을 제공하여 매개변수의 형식을 제거할 수 있다.
Calculate calc = (a, b) => a + b;
//람다식을 사용하지 않는다면
Caculate calc = delegate(int a, int b)
{
return a + b;
};
}
람다식은 => 연산자의 오른편에 식 대신 {}로 코드 블록을 만들어서 작성한다
(매개변수_목록) => {
문장1;
문장2;
...
}
예시
delegate void DoSomething();
static void Main(string[] args)
{
DoSomething DoIt = ( ) => //매개변수가 없는 경우에는 ()에 공백
{
Console.WriteLine("출력1");
Console.WriteLine("출력2");
Console.WriteLine("출력3");
};
DoIt();
}
익명 메소드와 무명 함수는 선언하기 전에 매번 Delegate를 선언해줘야한다. 이러한 문제를 해결하기 위해 Func, Action 대리자를 사용할 수 있다. Func는 Return값이 있는 메소드를, Action은 Return값이 없는 메소드를 참조한다
Func 대리자는 Return값이 존재하는 메소드를 참조한다. Parameter가 0개인 Func부터 16개까지 존재하며 형식 매개변수중 가장 마지막 매개변수는 Return 형식을 나타낸다
//예시
Func<int> func1 = () => 10; //input Parameter가 없으며 무조건 10을 반환
Console.WriteLine(func1()); //10출력
// 처음 있는 int는 입력 매개변수, 마지막에 있는 int는 Return 매개변수
Func<int, int> func2 = (x) => x * 2;
Console.WriteLine(func2(3)); // 6출력
Action 대리자는 Func 대지라와 비슷하지만 Return값이 없다는 차이점만 있다.
Action 대지라 또한 입력 Parameter가 0개부터 16개까지 존재한다.
Action act1 = () => Console.WriteLine("Action:); //매개변수가 없는 Action
act1();
int result = 0;
Action<int> act2 = (x) => result = x * x; // 람다식 밖에서 선언한 result에 x제곱 저장
act2(3);
Console.WriteLine($"Result : {result}"); // 9 출력