C# 람다 표현식(Lambda Expression)의 사용법
C# 람다 표현식(Lambda Expression)의 사용법
람다 표현식은 C#에서 간결한 형태로 익명 함수를 작성하는 방법입니다.
람다 표현식은 델리게이트(delegate), 이벤트(event), LINQ 쿼리 등에서 자주 사용되며, 코드의 가독성을 높이고 코드를 간결하게 작성할 수 있게 도와줍니다.
이 글에서는 C#에서 람다 표현식을 사용하는 방법을 자세히 알아보겠습니다.
1. 람다 표현식이란?
람다 표현식은 매개변수를 받아들여 어떤 동작을 수행하는 익명 함수를 의미합니다. 기본적인 형태는 다음과 같습니다.
(parameters) => expression
여기서 parameters는 함수의 매개변수를 나타내며, expression은 실행될 코드 블록입니다.
반환형은 자동으로 추론되므로, 별도로 명시할 필요가 없습니다.
2. 람다 표현식 기본 구문
람다 표현식은 아래와 같은 간단한 형태로 사용할 수 있습니다.
1) 단일 매개변수 및 단일 표현식
x => x * x
위 표현식은 x라는 하나의 매개변수를 받아들여, 그 값을 제곱하여 반환합니다. 이때 => 연산자는 람다 연산자라고 하며, 매개변수와 함수 본문을 구분하는 역할을 합니다.
2) 여러 매개변수
매개변수가 여러 개일 때는 괄호로 묶어 줍니다.
(x, y) => x + y
위 표현식은 x와 y라는 두 매개변수를 받아 그 합을 반환합니다.
3) 블록 본문
람다 표현식에서 실행할 코드가 여러 줄일 경우 중괄호 {}를 사용하여 블록 본문으로 작성할 수 있습니다.
(x, y) =>
{
int sum = x + y;
return sum;
}
위 코드는 두 매개변수를 받아 더한 값을 반환하는 블록 형태의 람다 표현식입니다.
3. 람다 표현식과 델리게이트
람다 표현식은 주로 델리게이트(delegate)를 사용하여 익명 함수를 정의하는 데 자주 사용됩니다.
예를 들어, Func 델리게이트를 사용하면 람다 표현식을 통해 간단한 함수를 정의할 수 있습니다.
1) Func 델리게이트와 람다 표현식
Func<int, int, int> add = (x, y) => x + y;
Console.WriteLine(add(3, 4)); // 출력: 7
위 코드에서 Func<int, int, int> 델리게이트는 두 개의 int 값을 매개변수로 받아 그 합을 반환하는 람다 표현식을 사용한 예시입니다.
2) Action 델리게이트와 람다 표현식
Action 델리게이트는 반환값이 없는 람다 표현식을 정의할 때 사용됩니다.
Action<string> printMessage = message => Console.WriteLine(message);
printMessage("Hello, Lambda!"); // 출력: Hello, Lambda!
위 코드에서는 문자열을 매개변수로 받아 출력하는 Action 델리게이트를 사용했습니다.
4. 람다 표현식과 LINQ
LINQ (Language Integrated Query)에서 람다 표현식은 쿼리 작업을 간결하게 표현하는 데 매우 유용합니다.
특히 Where, Select와 같은 메서드에서 자주 사용됩니다.
1) LINQ와 람다 표현식
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// 짝수만 필터링
var evenNumbers = numbers.Where(x => x % 2 == 0).ToList();
foreach (var num in evenNumbers)
{
Console.WriteLine(num); // 출력: 2, 4
}
위 코드는 Where 메서드를 사용하여 리스트에서 짝수만 필터링하는 람다 표현식을 사용한 예시입니다. x => x % 2 == 0은 리스트의 각 요소가 짝수인지 검사하여 true일 경우 반환합니다.
2) Select와 람다 표현식
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// 각 숫자의 제곱값 반환
var squaredNumbers = numbers.Select(x => x * x).ToList();
foreach (var num in squaredNumbers)
{
Console.WriteLine(num); // 출력: 1, 4, 9, 16, 25
}
Select 메서드는 각 요소를 변환하는 데 사용되며,
위 코드에서는 리스트의 각 요소를 제곱하는 람다 표현식을 사용했습니다.
5. 익명 메서드와 람다 표현식의 차이
람다 표현식과 익명 메서드는 둘 다 익명 함수로 사용될 수 있지만, 람다 표현식이 더 간결하고, 타입 추론이 가능한 장점이 있습니다.
익명 메서드 예시:
Func<int, int> square = delegate (int x) { return x * x; };
Console.WriteLine(square(5)); // 출력: 25
익명 메서드는 delegate 키워드를 사용해 정의됩니다. 하지만 같은 동작을 람다 표현식을 사용하면 훨씬 더 간결하게 작성할 수 있습니다.
Func<int, int> square = x => x * x;
Console.WriteLine(square(5)); // 출력: 25
6. 람다 표현식의 유용한 사용 사례
람다 표현식은 이벤트 처리, 스레딩, 비동기 프로그래밍 등 다양한 상황에서 사용될 수 있습니다.
그 중에서도 대표적인 사용 사례 몇 가지를 살펴보겠습니다.
1) 이벤트 처리
이벤트 핸들러를 람다 표현식으로 간결하게 정의할 수 있습니다.
button.Click += (sender, args) =>
{
Console.WriteLine("Button Clicked!");
};
2) 스레드와 람다 표현식
람다 표현식을 사용하여 스레드에 전달할 작업을 정의할 수 있습니다.
Thread thread = new Thread(() =>
{
Console.WriteLine("Background thread is running.");
});
thread.Start();
람다 표현식은 C#에서 익명 함수를 간결하게 작성할 수 있는 매우 유용한 기능입니다.
이를 통해 코드를 간결하고 가독성 좋게 만들 수 있으며, 델리게이트와 LINQ를 활용하는 다양한 상황에서 효율적으로 사용할 수 있습니다.
람다 표현식을 적극 활용하면 C# 코딩의 생산성을 크게 향상시킬 수 있습니다.