델리케이트
- 델리게이트(delegate)는 메서드를 참조하는 타입입니다.
- 다른 프로그래밍 언어에서는 함수 포인터라는 용어를 사용하기도 합니다.
- 델리게이트를 이용하면 메서드를 매개변수로 전달하거나 변수에 할당할 수 있습니다.
delegate int Calculate(int x, int y);
static int Add(int x, int y)
{
return x + y;
}
class Program
{
static void Main()
{
// 메서드 등록
Calculate calc = Add;
// 델리게이트 사용
int result = calc(3, 5);
Console.WriteLine("결과: " + result);
}
}
람다
- 람다(lambda)는 익명 메서드를 만드는 방법입니다.
- 람다를 사용하면 메서드의 이름 없이 메서드를 만들 수 있습니다.
- 람다는 델리게이트를 사용하여 변수에 할당하거나, 메서드의 매개변수로 전달할 수 있습니다.
형식
(parameter_list) => expression
정의하기
Calculate calc = (x, y) =>
{
return x + y;
};
Calculate calc = (x, y) => x + y;
사용 예시
using System;
// 델리게이트 선언
delegate void MyDelegate(string message);
class Program
{
static void Main()
{
// 델리게이트 인스턴스 생성 및 람다식 할당
MyDelegate myDelegate = (message) =>
{
Console.WriteLine("람다식을 통해 전달된 메시지: " + message);
};
// 델리게이트 호출
myDelegate("안녕하세요!");
Console.ReadKey();
}
}
Func, Action
Func
과Action
은 델리게이트를 대체하는 미리 정의된 제네릭 형식입니다.Func
는 값을 반환하는 메서드를 나타내는 델리게이트입니다. 마지막 제네릭 형식 매개변수는 반환 타입을 나타냅니다. 예를 들어,Func<int, string>
는int
를 입력으로 받아string
을 반환하는 메서드를 나타냅니다.Action
은 값을 반환하지 않는 메서드를 나타내는 델리게이트입니다.Action
은 매개변수를 받아들이지만, 반환 타입이 없습니다. 예를 들어,Action<int, string>
은int
와string
을 입력으로 받고, 아무런 값을 반환하지 않는 메서드를 나타냅니다.Func
및Action
은 제네릭 형식으로 미리 정의되어 있어 매개변수와 반환 타입을 간결하게 표현할 수 있습니다.
func
// Func를 사용하여 두 개의 정수를 더하는 메서드
int Add(int x, int y)
{
return x + y;
}
// Func를 이용한 메서드 호출
Func<int, int, int> addFunc = Add;
int result = addFunc(3, 5);
Console.WriteLine("결과: " + result);
action
// Action을 사용하여 문자열을 출력하는 메서드
void PrintMessage(string message)
{
Console.WriteLine(message);
}
// Action을 이용한 메서드 호출
Action<string> printAction = PrintMessage;
printAction("Hello, World!");
LINQ
- .NET 프레임워크에서 제공되는 쿼리 언어 확장
- 데이터 소스(예: 컬렉션, 데이터베이스, XML 문서 등)에서 데이터를 쿼리하고 조작하는데 사용됩니다.
- 데이터베이스 쿼리와 유사한 방식으로 데이터를 필터링, 정렬, 그룹화, 조인 등 다양한 작업을 수행할 수 있습니다.
- LINQ는 객체, 데이터베이스, XML 문서 등 다양한 데이터 소스를 지원합니다.
구조
// 데이터 소스 정의 (컬렉션)
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// 쿼리 작성 (선언적인 구문)
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
// 쿼리 실행 및 결과 처리
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}