12. Lambdas & Functional Programming
람다와 함수형 프로그래밍
치트시트
함수 타입:
(A,B) -> R람다 변수:
val f = { x: Int -> x * 2 }it: 단일 인자 생략 가능트레일링 람다:
list.forEach { println(it) }클로저: 외부 변수 자유롭게 캡처
고차 함수: 파라미터/반환값으로 함수 사용
서버 활용: DTO 변환, 로깅/측정 유틸, 라우팅 DSL
1) Java vs Kotlin 함수 취급 차이
Java: JDK 8부터 람다와 스트림 API 도입, 하지만 함수는 여전히 2급 시민 (익명 클래스 대체 수준)
Kotlin: 함수 자체가 값 → 변수에 저장, 인자로 전달, 반환 가능
val sum: (Int, Int) -> Int = { a, b -> a + b }
println(sum(3, 4)) // 72) 람다 기본 문법
함수 타입 표기:
(파라미터 타입...) -> 반환 타입마지막 파라미터가 함수라면, 소괄호 밖에 람다 배치 가능 (트레일링 람다)
여러 줄 람다 → 마지막 표현식이 반환값
3) Closure (클로저)
자바: 람다에서 사용할 변수는 final 또는 effectively final만 가능
코틀린: 외부 변수를 자유롭게 캡처 가능
👉 이 “변수 포획”을 가능케 하는 구조를 **클로저(Closure)**라 부름
4) 고차 함수 (Higher-order functions)
함수를 파라미터/반환값으로 받는 함수
코틀린 표준 라이브러리의 핵심 (filter, map, reduce 등)
5) 서버 개발 활용 패턴
A. 컬렉션 가공
→ 자바 스트림보다 간결하고 null-safe.
B. 공통 로직 추상화
→ 공통 부가기능(로깅, 성능 측정)을 고차 함수로 추상화.
C. DSL 설계
→ Ktor 같은 서버 프레임워크에서 DSL 기반 라우팅 지원.
Last updated