람다식을 사용하는 이유와 목적을 먼저 살펴 보는게 순서일 듯 싶네요.
- 익명 메소드를 만드는 경우
- Func와 Action으로 더 간편하게 무명 함수 만드는 경우
- LINQ를 이용한 방법으로 표현하는 경우
익명 메소드를 만드는 경우에는 delegate를 이용한 방법도 있습니다. 그런데 람다식을 이용한 방법도 제공하는 이유는 개발 히스토리에 해답이 있습니다.
마이크로소프트는 C# 2.0 에서 델리게이트를 이용한 익명 메소드를 만드는 방법을 제공했고, 람다식은 C# 3.0 에서 와서야 도입 되었습니다. 따라서 C# 2.0 에서 작성한 프로그램을 C# 3.0 에서 기능을 삭제할 수는 없는 일입니다.
식 형식
매개 변수 목록 => 식
문 형식
(매개 변수 목록) => {
..........................
..........................
..........................
};
예제1 : 식 형식의 람다식 표현
delegate int Calculate(int a, int b); static void Main(string[] args) { // 1. 람다식을 이용한 표현(매개변수 타입 있는 경우) Calculate cal1 = (int a, int b) => a + b; Console.WriteLine("Lambda Expression : {0} + {1} = {2}", 4, 5, cal1(4, 5)); // 2. 람다식을 이용한 표현(매개변수 타입 없는 경우) Calculate cal2 = (a, b) => a + b; Console.WriteLine("Lambda Expression : {0} + {1} = {2}", 4, 5, cal2(4, 5)); // 3. 델리게이트를 이용한 표현 Calculate cal3 = delegate(int a, int b) { return a + b; }; Console.WriteLine("Delegate : {0} + {1} = {2}", 4, 5, cal3(4,5)); Console.ReadLine(); }
식 형식의 람다식에서는 반환 형식이 없는 무명 함수를 만들 수 없지만, 문 형식의 람다식을 이용하면 가능합니다.
delegate void DoSomething(); static void Main(string[] args) { DoSomething DoIt = () => { Console.WriteLine("여기는 "); Console.WriteLine("대한민국 "); Console.WriteLine("입니다"); }; DoIt(); Console.ReadLine(); }
예제3 : 람다식이 익명 메소드를 대치하는 경우. 파라미터가 생략되는 경우가 있습니다.
button control 의 Click 이벤트는 EventHandler 델리게이트이며, 두 개의 파라미터를 가집니다. object sender, EventArgs e. 파라미터가 익명 메소드 안에서 사용하지 않는 경우에는 생략하는 경우도 있습니다.
private void Form1_Load(object sender, EventArgs e) { Button button1 = new Button(); button1.Text = "Click me !!!"; // 1. 델리게이트 이용 & 파라미터를 생략한 경우 button1.Click += delegate { MessageBox.Show("Button1 Clicked!"); }; // 2. 델리게이트 이용 & 파라미터가 있는 경우 button1.Click += delegate(object eventSender, EventArgs eventArgs) { MessageBox.Show("Button1 Clicked!"); }; // 3. 람다식을 이용한 식으로 표현함 button1.Click += (object eventSender, EventArgs eventArgs) => MessageBox.Show("Button1 Clicked!"); // 4. 람다식을 이용한 문으로 표현함 button1.Click += (object eventSender, EventArgs eventArgs) => { MessageBox.Show("Button1 Clicked!"); }; // 5. 람다식 이용 & 파라미터 타입 생략하는 경우 button1.Click += (eventSender, eventArgs) => { MessageBox.Show("Button1 Clicked!"); }; this.Controls.Add(button1); }
'C#' 카테고리의 다른 글
람다식(Lambda Expression) - 3 (0) | 2015.06.09 |
---|---|
람다식(Lambda Expression) - 2 (0) | 2015.06.09 |
EventHandler 와 EventHandler<TEventArgs> Delegate (0) | 2015.06.04 |
Event 와 Delegate (0) | 2015.06.01 |
초단위 시간 경과 보이기 (0) | 2015.05.12 |