람다 함수(Lambda Function)는 이름 없이 즉석에서 정의되는 익명 함수다. 수학의 람다 대수(Lambda Calculus)에서 유래했으며, 함수형 프로그래밍의 핵심 도구다. 고차 함수(map, filter, reduce)의 인자로 주로 사용된다.
언어별 람다 문법
python
# Python
square = lambda x: x ** 2
add = lambda x, y: x + y
nums = [1, 2, 3, 4, 5]
evens = list(filter(lambda x: x % 2 == 0, nums))
doubled = list(map(lambda x: x * 2, nums))
javascript
// JavaScript (Arrow Function)
const square = x => x ** 2;
const add = (x, y) => x + y;
const evens = [1,2,3,4,5].filter(x => x % 2 === 0);
const doubled = [1,2,3,4,5].map(x => x * 2);
java
// Java (함수형 인터페이스)
import java.util.function.*;
Function<Integer, Integer> square = x -> x * x;
BiFunction<Integer, Integer, Integer> add = (x, y) -> x + y;
List<Integer> evens = nums.stream()
.filter(x -> x % 2 == 0)
.collect(Collectors.toList());
kotlin
// Kotlin
val square: (Int) -> Int = { x -> x * x }
val add: (Int, Int) -> Int = { x, y -> x + y }
// 마지막 인자가 람다면 괄호 밖으로
nums.filter { it % 2 == 0 }.map { it * 2 }
람다 대수 (Lambda Calculus)
λx.x 항등 함수 (identity)
λx.λy.x 첫 번째 인자 반환
λf.λx.f x 함수 적용
캡처 방식
람다는 주변 변수를 캡처한다 — 이것이 클로저와의 연결점.
java
int threshold = 5;
Predicate<Integer> gt = x -> x > threshold; // threshold 캡처
// Java는 effectively final 변수만 캡처 가능
관련 개념
- •클로저 — 환경을 캡처하는 람다
- •함수형 프로그래밍 — 람다를 핵심으로 사용
- •이터레이터 — 람다를 받아 순회 처리
- •타입 시스템 — 함수 타입으로 람다 표현