c# 람다(Lambda) 표현식
C# Lambda 표현식(Lambda Expression) 이해하기
C#에서 Lambda 표현식은 간결하고 직관적으로 코드를 작성할 수 있는 강력한 도구입니다.
주로 간단한 메서드나 함수를 표현하는데 사용되며, 특히 LINQ 쿼리나 이벤트 처리에서 많이 활용됩니다.
이번 포스팅에서는 Lambda 표현식의 기본 개념, 문법, 그리고 사용 예시를 살펴보겠습니다.
1. Lambda 표현식이란?
Lambda 표현식은 익명 함수를 간결하게 표현한 문법으로, 매개변수와 함수 본문을 포함합니다.
즉, 이름이 없는 함수를 간단하게 작성할 수 있으며, 간단한 작업을 수행하는 함수나 콜백 메서드를 정의할 때 유용합니다.
Lambda 표현식의 기본 형식은 다음과 같습니다.
(매개변수) => { 표현식 }
=> 연산자는 람다 연산자라고 부르며, 왼쪽에는 매개변수를, 오른쪽에는 함수 본문을 정의합니다.
2. Lambda 표현식의 문법
Lambda 표현식의 문법은 매우 간단하며, 다양한 방식으로 사용될 수 있습니다.
1) 기본 Lambda 표현식
Lambda 표현식의 기본적인 형태는 다음과 같습니다.
(x, y) => x + y;
위 표현식은 두 개의 매개변수 x와 y를 받아서 두 값을 더한 결과를 반환하는 익명 함수입니다. 이 코드를 간단하게 사용하면 다음과 같이 표현할 수 있습니다.
Func<int, int, int> sum = (x, y) => x + y;
int result = sum(5, 10); // result = 15
2) 매개변수가 하나인 Lambda 표현식
매개변수가 하나일 경우에는 괄호를 생략할 수 있습니다.
x => x * x;
위 코드는 하나의 매개변수 x를 받아서, 그 값을 제곱하여 반환하는 함수입니다.
Func<int, int> square = x => x * x;
int result = square(5); // result = 25
3) 본문이 여러 줄인 Lambda 표현식
Lambda 표현식의 본문이 여러 줄일 경우, 중괄호 {}를 사용하여 명시적으로 표현할 수 있습니다.
(x, y) => {
int sum = x + y;
return sum;
}
이 경우, return 키워드를 사용하여 값을 명시적으로 반환할 수 있습니다.
3. Lambda 표현식과 Func, Action 대리자
Lambda 표현식은 대리자(delegate)와 밀접하게 연관되어 있습니다.
특히, C#에서 제공하는 Func<T1, T2, TResult>와 Action<T1, T2> 대리자와 함께 자주 사용됩니다.
1) Func 대리자
Func 대리자는 반환값이 있는 Lambda 표현식에 사용됩니다.
Func<int, int, int> add = (x, y) => x + y;
Console.WriteLine(add(5, 10)); // 출력: 15
2) Action 대리자
Action 대리자는 반환값이 없는 Lambda 표현식에 사용됩니다.
Action<string> print = s => Console.WriteLine(s);
print("Hello, Lambda!"); // 출력: Hello, Lambda!
3) Predicate 대리자
Predicate<T>는 T형 매개변수를 받아 true 또는 false 값을 반환하는 Lambda 표현식에 사용됩니다.
Predicate<int> isEven = x => x % 2 == 0;
Console.WriteLine(isEven(4)); // 출력: True
4. Lambda 표현식의 사용 예시
Lambda 표현식은 C#의 다양한 기능에서 활용될 수 있습니다. 특히 LINQ와 컬렉션 처리에서 매우 유용합니다.
1) LINQ에서의 Lambda 표현식
LINQ(Language Integrated Query)에서 Lambda 표현식은 데이터를 필터링하거나, 변환하는 데 자주 사용됩니다.
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
// 짝수만 필터링
var evenNumbers = numbers.Where(x => x % 2 == 0);
foreach (var num in evenNumbers)
{
Console.WriteLine(num); // 출력: 2, 4, 6
}
2) 이벤트 처리에서의 Lambda 표현식
Lambda 표현식은 이벤트 처리에서도 자주 사용됩니다. 익명 함수를 사용하여 이벤트 핸들러를 정의하는 경우 Lambda 표현식이 간결함을 제공합니다.
Button btn = new Button();
btn.Click += (sender, e) => Console.WriteLine("버튼 클릭됨!");
5. Lambda 표현식과 익명 메서드의 차이점
Lambda 표현식은 익명 메서드와 유사하지만, 구문이 더 간결하고, 타입 유추를 지원하며, 표현식 본문을 가질 수 있다는 차이점이 있습니다.
익명 메서드 예시:
Func<int, int> square = delegate(int x) {
return x * x;
};
Lambda 표현식으로 변환:
Func<int, int> square = x => x * x;
두 방식은 같은 기능을 하지만, Lambda 표현식은 더 간결하고 가독성이 좋습니다.
6. Lambda 표현식의 장단점
장점:
- 간결함: 간단한 작업을 위해 코드를 훨씬 간단하게 작성할 수 있습니다.
- 가독성 향상: 복잡한 코드 대신 간단한 표현식으로 코드를 쉽게 이해할 수 있습니다.
- 대리자와 결합: 다양한 대리자와 쉽게 결합할 수 있어 유연하게 사용할 수 있습니다.
단점:
- 디버깅 어려움: Lambda 표현식이 너무 복잡할 경우 디버깅이 어려울 수 있습니다.
- 과도한 사용: 지나치게 사용하면 오히려 코드의 가독성을 해칠 수 있습니다.
C#의 Lambda 표현식은 간결한 코딩 스타일과 강력한 기능을 제공하는 도구입니다.
특히 LINQ 쿼리나 이벤트 처리, 대리자와 함께 사용될 때 유용하며, 코드의 가독성과 유지보수성을 높일 수 있습니다. Lambda 표현식을 통해 더 효율적인 코드 작성을 시도해보세요.