C# 람다식
본문 바로가기
  • 게임 개발자가 되고싶은 구구
게임 개발 공부/C#

C# 람다식

by gugu99 2021. 12. 23.
반응형

안녕하세요!

 

게임개발자가 되기 위해 공부하고 있는 구구입니다.

오늘은 C#의 람다식에 대해 알아보도록 하겠습니다.

 


  • 람다식

(매개변수) => {함수 내부(식)}; //=>(람다연산자)

ex) (str) => {Console.WriteLine(str);};

da = (a) => {return a+a;};

 

- 익명 메소드

- 메소드와 동일하게 입력(파라미터), 출력(리턴) 존재

 

  • 람다식의 종류
  1. 식 람다(Expression Lambda) : 람다연산자(=>) 옆에 식만 있을 경우
  2. 문 람다(Statement Lambda) : 람다연산자(=>) 옆에 중괄호{}를 쓰고 그 안에 내용을 적어넣음.

 

 

 

C#-람다식-Lamdba-익명메소드

코딩을 보면 저번시간에 배운 delegate가 나옵니다. 각각 string이 매개변수인 것과 int가 매개변수인 것이 있습니다.

그 다음 CallPrint(string str)과 CallAdd(int a)는 메인함수에서 dPrint와 dAdd에 넣을것으로 예상됩니다.(27, 32번 줄)

dp("CallPrint")로 함수를 부르는것 까지는 저번 delegate 내용에서 했었기 때문에 그 다음 문장을 보겠습니다.

이와 비교하기 위해서 람다식으로도 dp를 설정하고 한번 실행해보겠습니다.

(str) => {Console.WriteLine(str);); 의 경우는 문람다입니다.

 

 

C#-람다식-Lamdba-익명메소드

 

 

 

 

 

 

 

  • 리스트와 람다식

- 리스트 함수 중 delegate 파라미터를 사용

- Collections에서 다양하게 활용

- 리스트외에도 배운 콜렉션을 이용할 수 있음.

 

listData.FindAll((num) => { return 조건식; }); = 조건식을 만족하는 num을 모두 찾아라

listData.Find((num) => 조건식;); = 조건식을 만족하는 첫번째 num을 반환

 

 

C#-람다식-Lamdba-익명메소드-리스트-콜렉션-Collections-FindAll-Find

List<T>를 이용해서 listData라는 배열을 선언 및 초기화를 했음을 알 수 있습니다.

그 다음 FindAll 메소드를 이용하면 해당 조건을 만족하는 배열을 반환하기 때문에 List<int> listfindAll로 받습니다.

 

Find는 조건을 만족하는 첫번째 수를 반환하기 때문에 int형에 바로 넣습니다.

 

C#-람다식-Lamdba-익명메소드-리스트-콜렉션-Collections-FindAll-Find

 

 

  • 함수와 람다식

- 함수의 파라미터

 

 

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"); //파라미터가 없는 경우 () 반드시 사용

 

 

C#-람다식-Lamdba-익명메소드-리스트-콜렉션-Collections-FindAll-Find
C#-람다식-Lamdba-익명메소드-리스트-콜렉션-Collections-FindAll-Find


  • 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

 

 

C#-람다식-Lamdba-익명메소드-리스트-콜렉션-Collections-FindAll-Find-Action-void-delegate
C#-람다식-Lamdba-익명메소드-리스트-콜렉션-Collections-FindAll-Find-Action-void-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#-람다식-Lamdba-익명메소드-리스트-콜렉션-Collections-FindAll-Find-Func-반환-delegate
C#-람다식-Lamdba-익명메소드-리스트-콜렉션-Collections-FindAll-Find-Func-반환-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

댓글