안녕하세요!
게임개발자가 되기 위해 공부하고 있는 구구입니다.
오늘은 C#의 람다식에 대해 알아보도록 하겠습니다.
- 람다식
(매개변수) => {함수 내부(식)}; //=>(람다연산자)
ex) (str) => {Console.WriteLine(str);};
da = (a) => {return a+a;};
- 익명 메소드
- 메소드와 동일하게 입력(파라미터), 출력(리턴) 존재
- 람다식의 종류
- 식 람다(Expression Lambda) : 람다연산자(=>) 옆에 식만 있을 경우
- 문 람다(Statement Lambda) : 람다연산자(=>) 옆에 중괄호{}를 쓰고 그 안에 내용을 적어넣음.
코딩을 보면 저번시간에 배운 delegate가 나옵니다. 각각 string이 매개변수인 것과 int가 매개변수인 것이 있습니다.
그 다음 CallPrint(string str)과 CallAdd(int a)는 메인함수에서 dPrint와 dAdd에 넣을것으로 예상됩니다.(27, 32번 줄)
dp("CallPrint")로 함수를 부르는것 까지는 저번 delegate 내용에서 했었기 때문에 그 다음 문장을 보겠습니다.
이와 비교하기 위해서 람다식으로도 dp를 설정하고 한번 실행해보겠습니다.
(str) => {Console.WriteLine(str);); 의 경우는 문람다입니다.
- 리스트와 람다식
- 리스트 함수 중 delegate 파라미터를 사용
- Collections에서 다양하게 활용
- 리스트외에도 배운 콜렉션을 이용할 수 있음.
listData.FindAll((num) => { return 조건식; }); = 조건식을 만족하는 num을 모두 찾아라
listData.Find((num) => 조건식;); = 조건식을 만족하는 첫번째 num을 반환
List<T>를 이용해서 listData라는 배열을 선언 및 초기화를 했음을 알 수 있습니다.
그 다음 FindAll 메소드를 이용하면 해당 조건을 만족하는 배열을 반환하기 때문에 List<int> listfindAll로 받습니다.
Find는 조건을 만족하는 첫번째 수를 반환하기 때문에 int형에 바로 넣습니다.
- 함수와 람다식
- 함수의 파라미터
1. CallBackFunc(CallPrint, "Hello"); //delegate의 함수 연결
2. CallBackFunc(delegate(string str) { Console.WriteLine(str); }, "Hello"); //delegate 직접
3. CallBackFunc((string str) => { Console.WriteLine(str); }, "Hello"); //람다의 식형태
4. CallBackFunc((str) => Console.WriteLine(str), "Hello"); //람다식 기본
5. CallBackFunc(str => Console.WriteLine(str), "Hello"); //가장 많이 사용
※ dFunc dfunc = () => Console.WriteLine("No Params"); //파라미터가 없는 경우 () 반드시 사용
- Action과 Func
- Action
- 리턴값이 없는(void형태) delegate함수를 미리 선언해둠.
public delegate void Action();
·····
public delegate void Action<in T1, in T2, in T3>(T1 arg1, T2 arg2, T3 arg3);
·····
Action = void형태인데 파라미터에 의해 16가지 버전이 존재하는(각각의 파라미터는 일반화) delegate
- Func
- 리턴값이 있는 경우 리턴값까지 일반화 해서 delegate함수를 미리 선언해둠.
- 매개변수가 16개 이상이거나 ref나 out 매개변수를 사용해야 하는 경우는 사용불가
public delegate TResult Func<out TResult>();
·····
public delegate TResult Action<in T1, in T2, in T3, out TResult>(T1 arg1, T2 arg2, T3 arg3);
·····
Func = 일반화된 반환값이 있고 버전이 17개까지 존재하는(각각의 파라미터는 일반화) delegate임
오늘은 여기까지 하도록 하겠습니다.
'게임 개발 공부 > C#' 카테고리의 다른 글
C# 파일처리 (0) | 2021.12.25 |
---|---|
C# LINQ (0) | 2021.12.24 |
C# 델리게이트&이벤트 (0) | 2021.12.22 |
C# 예외 처리 (0) | 2021.12.21 |
C# 일반화 프로그래밍 2 (0) | 2021.12.20 |
댓글