3_c#/C#문법

C# 람다식

Mi:sAng 2024. 11. 20. 21:35

0.람다식이란

함수를 만드는 방식 중 하나 정도로 이해하자.

익명함수를 지칭하는 용어로 이름없이 내용물만 정의하는 방식이다.

 

 

1.람다식 형식

//식 람다
(매개변수목록) => 식

//문 형식의 람다
(매개변수목록) =>
{
	문장1;
    문장2;
    ...;
    문장N;
}

 

2.람다식으로 무명함수 정의하기

  -무명함수 : 람다식으로 만드는 익명메소드

  -무명함수를 작성하기 위해서는 먼저 대리자로 무명함수의 모습을 결정

 

delegate int Calculate(int a, int b);

static void Main(string[] args){
	Calculate calc = (int a, int b) => a+b;
    Console.WriteLine(calc(1,2));
}

 

delegate int Calculate (int a, int b);

static void Main(string[] args){
	Calculate calc = (a,b) => a+b;
    Console.WriteLine (calc(1,2));
}

 

3.문 형식의 람다식

  - 람다식 바디를 식이 아닌 코드 블록으로 작성

delegate void DoSomething();

static void Main(string[] args){
	DoSomething DoIt = () =>
    {
    	Console.WriteLine("123");
       	Console.WriteLine("456");
       	Console.WriteLine("789");
    };
    DoIt();
}

 

4.Func 대리자와 Action 대리자

  -.NET 라이브러리에 사전 정의되어 있는 대리자

  -익명 메소드/ 무명 함수 정의를 위해 매번 대리자를 새롭게 정의하는 불편을 제거

  -일반화와 최대 16개 매개변수를 지원

  -Func대리자 : 반환값이 있는 익명 메소드/무명 함수용 대리자

  -Action대리자 : 반환값이 없는 익명 메소드/무명 함수용 대리자

//델리게이트 Func
public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T arg)

Func<int> func1 = () => 10;//입력 매개변수는 없고, 무조건 10을 반환
Console.WriteLine(func1());

Func<int, int> func2 = (x) => x*2;//입력매개변수는 int 형식 하나, 반환 형식도 int 하나
Console.WriteLine(func2(3));//6출력

 

 

//델리게이트 Action
public delegate void Action<>()
public delegate void Action<in T>(T arg)
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2)

Action act1 = () => Console.WriteLine("Action()");
act1();

Action<double, double> act3 = (x,y) =>
{	
	double pi = x/y;
    Console.WriteLine("Action <T1,T2>({0},{1}):{2}" , x,y,pi);
};
act3(22.0,7.0);

 

5.식 트리( Expression Tree)

-코드를 트리 자료 구조로 표현한 것

-C#에서는 런타임에 식트리를 생성하고 실행할 수 있다

(프로그램 실행 중에 추가적인 코드를 생성하여 실행가능)

-LINQ, DLR에서 사용된다.

-식트리 구축에 주로 람다식을 사용한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'3_c# > C#문법' 카테고리의 다른 글

C# LINQ  (0) 2024.12.29
C# Delegate: 대리자  (1) 2024.11.20
C# 일반화 프로그래밍  (0) 2024.11.20
C# 배열, 컬렉션, 인덱서  (0) 2024.11.20
C# 프로퍼티  (1) 2024.11.20