Search

이것이 C#이다: 14장 - 람다식 (1/2)

서론

람다식(Lambda Expression)은 현대 프로그래밍에서 가장 강력한 기능 중 하나입니다. 1936년 알론조 처치가 고안한 람다 계산법에서 시작된 이 개념은, 오늘날 C#을 비롯한 대부분의 주요 프로그래밍 언어에서 필수적인 기능이 되었습니다.
C#을 배우는 제 입장에서 람다식은 단순한 문법적 특성을 넘어, 함수형 프로그래밍의 정수를 보여주는 매력적인 개념이었습니다. 이번 포스트에서는 람다식의 기본 개념부터 실제 활용까지 단계적으로 살펴보겠습니다.

본론

1. 람다식의 기본 이해

1.1 람다식이란?

람다식은 본질적으로 익명 메소드를 생성하는 방법입니다. 기존의 명명된 메소드 대신 필요한 시점에 즉시 정의하고 사용할 수 있는 '무명 함수(Anonymous Function)'를 만들 수 있습니다.
// 기존의 대리자를 이용한 방식 delegate int Calculate(int a, int b); Calculate calc = delegate(int a, int b) { return a + b; }; // 람다식을 이용한 방식 Calculate calc = (a, b) => a + b;
C#
복사

1.2 형식 유추의 활용

C# 컴파일러의 '형식 유추(Type Inference)' 기능은 람다식을 더욱 간결하게 만들어줍니다.
// 매개변수 형식을 명시한 경우 Func<int, int, int> add = (int a, int b) => a + b; // 형식 유추를 활용한 경우 Func<int, int, int> add = (a, b) => a + b;
C#
복사

2. 람다식의 발전된 형태

2.1 문 형식의 람다식

때로는 단순한 식(Expression) 형태를 넘어서는 복잡한 로직이 필요할 때가 있습니다. 이런 경우를 위해 C#은 문 형식의 람다식(Statement Lambda)을 제공합니다.
// 식 형식의 람다식 Func<int, int> square = x => x * x; // 문 형식의 람다식 Func<int, int> factorial = x => { int result = 1; for(int i = 1; i <= x; i++) result *= i; return result; };
C#
복사

2.2 Func와 Action 대리자

.NET 프레임워크는 람다식을 더욱 편리하게 사용할 수 있도록 Func와 Action 대리자를 제공합니다.

Func 대리자: 결과를 반환하는 메소드를 위해

// 다양한 Func 대리자의 예 Func<int> getNumber = () => 42; // 매개변수 없음 Func<int, int> doubled = x => x * 2; // 매개변수 1개 Func<int, int, string> format = (x, y) => $"{x}+{y}"; // 매개변수 2개
C#
복사

Action 대리자: 작업 수행을 위해

// Action 대리자 활용 예시 Action sayHello = () => Console.WriteLine("Hello"); // 매개변수 없음 Action<string> greet = name => Console.WriteLine($"Hi {name}"); // 매개변수 1개
C#
복사

결론

람다식은 단순히 코드를 줄이는 것 이상의 의미를 가집니다. 함수형 프로그래밍의 개념을 객체 지향 언어에 자연스럽게 도입한 예시이며, 현대 프로그래밍에서 필수적인 요소가 되었습니다.

참고 자료

박상현, "이것이 C#이다", 한빛미디어, 2023