C# 35-1. 람다식. (Lambda Expression.)
페이지 정보
본문
안녕하세요. 소심비형입니다. 오늘은 람다식에 대해 알아보도록 하겠습니다. 람다식은 대리자 또는 LINQ의 동적 쿼리를 생성하거나 실행할 수 있는 Expression Trees를 생성할 때 사용할 수 있는 익명 함수입니다. 익명 함수는 2가지로 분류되는데요. 무명 메소드(Method)와 람다 식(Lambda Expression)입니다. 무명 메소드는 .NET 2.0부터 있어왔고, 익명 함수는 .NET 3.0에 추가된 기능입니다. 이 둘은 미묘한 차이가 있습니다-_-;
지금까지 사용된 예제에서 가끔씩 무명 메소드와 람다 식이 사용되었습니다. 명명 메소드보다 편리하기도 하고 코딩 오버헤드를 줄일 수 있기 때문이죠. 그외에도 일회성 메소드인 경우에는 대부분이 람다식을 사용하고 있기도 합니다. 특히 배열을 다루는 경우 링큐와 함께 익명 형식과 람다 식 또는 람다 문은 아주 강력한 기능을 제공합니다.
아래 간단한 예제를 보면서 람다 식이 무엇인지 확인 해보세요.
using System;
namespace SimpleLambda
{
class MainApp
{
delegate int Calculate(int a, int b); static void Main(string[] args)
{
// 람다 식
Calculate calc = (a, b) => a + b;
// 람다 문
//Calculate calc = (a, b) => { return a + b; };
// 무명 메소드
//Calculate calc = delegate(int a, int b) { return a + b; };
Console.WriteLine("{0} + {1} = {2}", 3, 4, calc(3, 4));
Console.ReadKey();
}
}
}
먼저 12라인의 람다 식은 => 연산자를 통해 생성합니다. 왼쪽에 입력 매개 변수를 지정하고 오른쪽에 식을 만듭니다. 위의 경우에는 a와 b 두개 인자를 받은 후 a와 b를 더한 값을 반환합니다. 이는 7라인의 대라자를 통해 알 수 있습니다. 15라인은 람다 문입니다. 18라인의 무명 메소드와 동일합니다. 중괄호를 이용해서 메소드처럼 문을 만들 수 있습니다. 이 코드를 실행하면 아래와 같은 결과를 확인할 수 있습니다. 물론, 15, 18라인의 주석을 풀면서 실행해도 동일한 결과가 표시됩니다.
람다 문은 람다 식으로 처리할 수 없는 복잡한 명령을 처리할 수 있습니다. 아래 예제를 통해 람다식과 람다문의 차이를 알 수 있습니다.
using System;
namespace StatementLambda
{
class MainApp
{
delegate string Concatenate(string[] args);
static void Main(string[] args)
{
Concatenate concat = (arr) => {
string result = "";
foreach (string s in arr)
result += (s + Environment.NewLine);
return result;
};
Console.WriteLine(concat(args));
Console.ReadKey();
}
}
}
이 응용 프로그램을 비주얼 스튜디오에서 실행하려면 아래처럼 명령줄 인수에 값을 입력하세요.
위 코드를 익명 메소드로 변환하는 것은 간단합니다. 아래처럼 12라인만 수정하면 되죠.
using System;
namespace StatementLambda
{
class MainApp
{
delegate string Concatenate(string[] args); static void Main(string[] args)
{
Concatenate concat = delegate (string[] arr)
{ string result = ""; foreach (string s in arr) result += (s + Environment.NewLine); return result; };
Console.WriteLine(concat(args));
Console.ReadKey();
}
}
}
결과는 동일합니다. 이 둘은 동일하나 무명 메소드의 경우 대리자가 매개 변수를 가지지 않는다면 매개 변수 목록을 생략할 수 있습니다. 하지만, 람다식 또는 람다문은 매개 변수가 없더라도 목록에 빈 값을 표시합니다. 다시 말해서 익명 함수는 매개 변수를 전달하는 괄호를 생략할 수 있다는 의미입니다.
using System;
namespace StatementLambda
{
class MainApp
{
delegate void Concatenate(); static void Main(string[] args)
{
Concatenate concat = delegate
{ Console.WriteLine("Hello NGMASTER!"); };
concat();
Console.ReadKey();
}
}
}
다음 시간에...
- 이전글35-2. 람다식. (Lambda, IEnumerable, Action, Func) 20.08.27
- 다음글34. 변환 연산자. (casting operator) 20.08.27
댓글목록
등록된 댓글이 없습니다.