===4주차 강의 복습===
1.람다 (Lamda)
2.델리게이트 (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);
}
}
-사용예시
//MyDelegate라는 대리자(delegate)
public delegate void MyDelegate(string msg);
public static void MethodA(string msg)
{
Console.WriteLine("param of methodA : " + msg);
}
public static void MethodB(string msg)
{
Console.WriteLine("param of MethodB : " + msg);
}
MyDelegate del; // 대리자 인스턴스생성
del = new MyDelegate(MethodA); //MethodA 메서드를 참조
del("Method A Call"); //MethodA처럼 사용
del = new MyDelegate(MethodB);
del("Method B Call");
-delegate를 쓰면 효율적인 상황
>work,success,failure의 여러가지 상황들을 수행하는 여러 메서드들이 필요한 상황
>Func, Action delegate로 메서드를 전달 받아 하나의 SuccessFailHelper 메서드 하나로 전부 처리할수 있음
>아래와 같은 상황에서 대리자(delegate)를 사용하지 않으면 메서드를
조합하는 메서드를 새로 추가하고 로직을 만들게 되고 그러면 코드가 증가하게 되는 단점이 있음
public static bool work1()
{
//...
}
public static bool work2()
{
//...
}
public static bool work3()
{
//...
}
public static void success1()
{
//...
}
public static void success2()
{
//...
}
public static void failure1()
{
//...
}
public static void failure2()
{
//...
}
public static void SuccessFailHelper(Func<bool> work, Action success, Action failure)
{
if (work())
success();
else
failure();
}
static void Main(string[] args)
{
SuccessFailHelper(work1, success1, failure1);
SuccessFailHelper(work1, success2, failure2);
}
3 .Func과 Action
Func과 Action은 델리게이트를 대체하는 미리 정의된 제네릭 형식
Func는 값을 반환하는 method를 나타내는 Delegate
- ex) Func<int, string>은 int를 입력받아 string을 반환하는 method
Action은 값을 반환하지 않는 method를 나타내는 Delegate
- ex) Action<int, string>은 int와 string을 입력으로 받고 값을 반환하지 않는다
4 .LINQ (Language Integrated Query)
// 데이터 소스 정의 (컬렉션)
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);
}
과거에 MySQL을 공부했던 부분이 오늘 4주차 강의에서 복습을 하였던 LINQ(Language Integrated Query)를 이해하는데 많은 도움이 되었다.
Func나 Action같은 델리게이트를 이용하여 코드를 짜는것의 장점에 대해 아직은 정확히 이해하지 못하였다. 분명 간결하고 빠르게 짤 수 있지만 지금까지의 코딩경험으로는 델리게이트를 사용해야한다는 상황에 놓인적이 없어서 일 수도 있다는 생각이 든다.
람다는 사용방식에 의해 메모리상의 불필요한 연산을 줄인다는 장점이 있다는것을 이해했다.