본문 바로가기

C#

C# 람다 식 (Lambda Expression)

1. 개념 설명

람다 식은 익명 함수를 간결하게 표현하는 문법입니다. 델리게이트와 식 트리로 변환되며 주로 Func/Action과 함께 씁니다. 매개변수 뒤에 =>로 본문을 연결하고, 한 줄은 식 본문, 여러 줄은 문장 본문으로 작성합니다. 외부 변수 캡처(클로저)도 지원합니다.

2. 코드 예제

간단한 예제로 Func/Action, LINQ, 문장 본문, 클로저를 함께 살펴봅니다. 콘솔 출력으로 동작을 확인합니다.

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        Func<int, int> square = x => x * x;
        Action<string> greet = name => Console.WriteLine($"Hello, {name}!");

        var numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
        var evensTimes10 = numbers.Where(n => n % 2 == 0)
                                  .Select(n => n * 10);

        greet("Lambda");
        Console.WriteLine($"square(7) = {square(7)}");
        Console.WriteLine("evens*10: " + string.Join(",", evensTimes10));

        Func<int, int, int> add = (a, b) =>
        {
            var sum = a + b;
            Console.WriteLine($"adding {a}+{b}");
            return sum;
        };
        Console.WriteLine($"add(3,4) = {add(3, 4)}");

        int factor = 3;
        var scaled = numbers.Select(n => n * factor); // capture
        factor = 5; // deferred execution affects result
        Console.WriteLine("scaled by factor (after change to 5): " + string.Join(",", scaled));
    }
}

LINQ로 필터·변환하고, 문장 본문은 중간 계산과 return을, 클로저는 지연 실행의 영향을 보여줍니다.

3. 주의사항/팁

LINQ는 기본적으로 지연 실행이어서 캡처한 변수 값이 나중에 평가될 수 있습니다. 다중 매개변수는 괄호가 필요하며, 문장 본문에서는 return을 잊지 마세요. 루프 변수 캡처는 의도치 않은 버그를 만들 수 있으니 지역 복사로 고정하는 습관이 좋습니다. 성능 민감 구간에서는 ToList()로 즉시 실행하거나 값 복사를 고려하세요.

'C#' 카테고리의 다른 글

C# Enum 활용법  (0) 2026.04.10
C# var와 타입 추론  (0) 2026.04.09
C# using 문과 IDisposable  (0) 2026.04.08
C# 튜플 (Tuple)과 분해  (0) 2026.04.08
C# IEnumerable vs IQueryable  (0) 2026.04.07