본문 바로가기

- Programming/- C#

★ 18. 람다식 (Lambda Expression)

반응형

# 람다 식


람다식은 무명 메소드를 단순한 계산식으로 표현한 것입니다.
메소드는  크게 매개변수와 내부 식, 반환 값으로 구성이 됩니다. 이들을 가지고 메소드를 계산 식으로 표현할 수 있는데 그것을 람다 식이라고합니다.

무명 메소드의 코드를 보겠습니다.

1
2
3
4
5
6
MyDelegate A;
 
= delegate(int a, int b)
{
    return a + b;
};
cs

위의 코드를 람다 식으로 표현하면 아래처럼 변환할 수 있습니다.

1
2
3
4
5
MyDelegate A;
 
= (int a, int b) => a+b;
// 또는
// A = (a,b) => a+b;
cs

무명 메소드에 비해 상당히 간결하게 표현되는 것을 알 수 있습니다.
람다 식은 매개변수로 전해지는 a, b의 타입까지도 생략이 가능합니다. (컴파일러가 좌 항의 델리게이트의 타입을 참고해서 타입을 유추하는 것입니다.)
람다식에 대한 다음 예제를 작성해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Main
{
    delegate int MyDelegate(int a, int b);
    delegate void MyDelegate2();
 
    static void Main()
    {
        MyDelegate add = (a,b) => a+b;
        MyDelegate2 lambda = () => Console.WriteLine("람다");
 
        Console.WriteLine("1 + 2 = {0}", add(12));
 
        lambda();
    }
}
cs

Output

1 + 2 = 3
람다


# 문 형식의 람다 식

지금까지는 람다 식을 단순한 계산 식 하나만을 표현하였습니다. 그렇다면 람다 식 내에서 메소드처럼 다양한 처리를 해줄 수는 없을까요? 당연히 가능합니다. 그냥 메소드처럼 중괄호 내에 작성하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
delegate void MyDelegate(int a, int b);
 
MyDelegate A = (a, b) =>
    {
        if (a > b)
            Console.WriteLine("{0}가 크다", a);
        else if (a > b)
            Console.WriteLine("{0}가 크다", b);
        else
            Console.WriteLine("{0}, {1}는 같다", a, b);
    };
cs

메소드를 간략화 했다고 보시면됩니다.

위의 내용을 프로그램으로 작성해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Main
{
    delegate void MyDelegate(int a, int b);
    
    static void Main()
    {    
        MyDelegate Compare = (a, b) =>
            {
                if (a > b)
                    Console.WriteLine("{0}보다 {1}가 크다", b, a);
                else if (a > b)
                    Console.WriteLine("{0}보다 {1}가 크다", a, b);
                else
                    Console.WriteLine("{0}, {1}는 같다", a, b);
            };
 
        Compare(12);
    }
}
cs

Output

1보다 2가 크다

참고 사이트 : http://mrw0119.tistory.com/22

반응형

'- Programming > - C#' 카테고리의 다른 글

★ 17. C# - Dictionary Collection  (3) 2017.03.26
★ 16. C# - List 사용 예제  (2) 2017.03.22
★ 15. c# ref와 out의 차이  (0) 2017.02.16
★ 14. c# 네트워크 개발 p13  (0) 2017.02.16
★ 13. c# 네트워크 개발 p12  (0) 2017.02.16