c#

C# 람다 표현식(Lambda Expression)의 사용법

Russell Developer 2024. 9. 25. 20:00

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 키워드를 사용해 정의됩니다. 하지만 같은 동작을 람다 표현식을 사용하면 훨씬 더 간결하게 작성할 수 있습니다.

csharp
 
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# 코딩의 생산성을 크게 향상시킬 수 있습니다.