람다식(Lambda)식은 접근자, 함수 이름, return문이 없는 익명 함수(anonymous function)다.
람다식을 사용하면 더 짧은 코드를 작성할 수 있으며 => 연산자를 사용한다.
class Program
{
static int DoubleFunc(int num)
{
return num * 2;
}
static void Main(string[] args)
{
Console.WriteLine(DoubleFunc(10));
}
}
// 람다식 사용
class Program
{
static void Main(string[] args)
{
Func<int, int> DoubleFunc = (num) => num * 2;
int num = 10;
Console.WriteLine(DoubleFunc(num));
}
}
// 실행 결과
20
내장된 제네릭 대리자 Func
Func 제네릭 대리자는 0개 이상의 인수를 가지며, 마지막에 반환 타입을 작성한다.
Func <int, double, int> FuncMethod1;
// int형 매개변수, double형 매개변수, 반환 타입은 int형
Func <int, int> FuncMethod2;
// int형 매개변수, 반환 타입은 int형
Func <int> Funcmethod3;
// 매개변수 없음, 반환 타입은 int 형
class Program
{
static int DoubleFunc(int num)
{
return num * 2;
}
static void Main(string[] args)
{
Func<int, int> DoubleFuncDelegate = DoubleFunc;
int num = 10;
Console.WriteLine(DoubleFuncDelegate(num));
}
}
// 실행 결과
20
Func 람다식
다음 예제는 DoubleFunc 메서드를 제거하고 Func 대리자가 람다식을 가리킨다
class Program
{
/*
static int DoubleFunc(int num)
{
return num * 2;
}
*/
static void Main(string[] args)
{
Func<int, int> DoubleFuncDelegate = num => num * 2;
int num = 10;
Console.WriteLine(DoubleFuncDelegate(num));
}
}
함수의 매개변수가 1개인 경우 소괄호를 생략해도 되지만, 2개 이상인 경우 소괄호를 사용한다. 다음은 int형 매개변수 2개의 값을 더한 결과를 반환하는 예제다.
class Program
{
static void Main(string[] args)
{
// <int, int, String> int형 2개의 매개변수를 가지며, String타입의 값을 반환합니다.
// (a, b)는 매개변수입니다.
// (a + b).ToString()은 a + b 결과를 String으로 변환합니다.
Func<int, int, String> DoubleFuncDelegate = (a, b) => (a + b).ToString();
Console.WriteLine(DoubleFuncDelegate(10, 20));
}
}
// 실행 결과
30
내장된 제네릭 대리자 Action
Action 제네릭 대리자는 0개 이상의 인수를 가지며, void 타입을 반환하므로 반환 타입을 명시하지 않는다.
Action <int, double, int> FuncMethod1;
// int형 매개변수, double형 매개변수, int형 매개변수
Action <int, int> FuncMethod2;
// int형 매개변수, int형 매개변수
Action <int> Funcmethod3;
// int형 매개변수
아래 예제는 Action 대리자가 ConsolePrintFunc 메서드를 가지고 있다.
class Program
{
static void ConsolePrintFunc(int a, int b)
{
Console.WriteLine(a + b);
}
static void Main(string[] args)
{
Action<int, int> ActionDelegate = ConsolePrintFunc;
ActionDelegate(10, 20);
}
}
// 실행 결과
30
Action 람다식
class Program
{
/*
static void ConsolePrintFunc(int a, int b)
{
Console.WriteLine(a + b);
}
*/
static void Main(string[] args)
{
Action<int, int> ActionDelegate = (a, b) => Console.WriteLine(a + b);
ActionDelegate(10, 20);
}
}
로컬 대리자 메서드
int DoubleFuncDelegate(int num) => num * 2;
void ActionDelegate(int a, int b) => Console.WriteLine(a + b);
class Program
{
static void Main(string[] args)
{
int DoubleFunc(int num) => num * 2;
Console.WriteLine(DoubleFunc(50));
void ActionFunc(int a, int b) => Console.WriteLine(a + b);
ActionFunc(10, 20);
}
}
// 실행 결과
100
30
출처: https://developer-talk.tistory.com/437 [DevStory:티스토리]
'프로그래밍 언어 > C#' 카테고리의 다른 글
[C#] Visual Studio Nuget 설치 (0) | 2024.03.05 |
---|---|
[C#] Nuget이란? (0) | 2024.03.05 |
[C#] 배열의 타입을 변경하는 방법 (제네릭 가능) (0) | 2024.01.29 |
[C#] String Interning (0) | 2024.01.04 |
[C#] 고성능 서버 - __FILE__, __LINE__ 대체제 (0) | 2024.01.04 |