반응형
# 람다 식
람다식은 무명 메소드를 단순한 계산식으로 표현한 것입니다.
메소드는 크게 매개변수와 내부 식, 반환 값으로 구성이 됩니다. 이들을 가지고 메소드를 계산 식으로 표현할 수 있는데 그것을 람다 식이라고합니다.
무명 메소드의 코드를 보겠습니다.
1 2 3 4 5 6 | MyDelegate A; A = delegate(int a, int b) { return a + b; }; | cs |
위의 코드를 람다 식으로 표현하면 아래처럼 변환할 수 있습니다.
1 2 3 4 5 | MyDelegate A; 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(1, 2)); 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(1, 2); } } | 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 |