minstudio

10. 고차 함수와 람다식 (Lambda & Higher-Order Functions)

코틀린에서 함수는 일급 시민(First-class citizen)입니다. 즉, 함수를 변수처럼 저장하고, 다른 함수의 파라미터로 넘기고, 함수에서 리턴할 수 있습니다.

함수를 파라미터로 받거나 반환하는 함수를 고차 함수(Higher-Order Function)라고 하며, 넘겨주는 익명 함수 블록을 람다(Lambda)라고 부릅니다. 맨 마지막 파라미터가 함수라면 람다 블록({})을 소괄호 밖으로 빼낼 수 있는 트레일링 람다(Trailing Lambda) 문법을 제공하여 매우 세련된 코딩이 가능합니다.

// 1. 고차 함수 선언
// action 매개변수는 (Int, Int)를 받아서 Int를 반환하는 '함수 타입'입니다.
fun calculate(a: Int, b: Int, action: (Int, Int) -> Int): Int {
    val result = action(a, b) // 전달받은 함수(람다)를 여기서 실행!
    return result
}

fun main() {
    // 2. 람다식 사용 (변수에 함수를 저장)
    val sumLambda: (Int, Int) -> Int = { x, y -> x + y }
    
    println("람다 변수 테스트: " + calculate(10, 5, sumLambda))

    // 3. 트레일링 람다 (Trailing Lambda)
    // 함수의 마지막 인자가 함수라면, 소괄호 밖으로 중괄호를 뺄 수 있습니다. (코틀린의 핵심 매력)
    val multiResult = calculate(10, 5) { x, y -> 
        x * y // 블록의 마지막 줄이 반환값이 됨
    }
    println("트레일링 람다(곱셈): " + multiResult)
}
10. 고차 함수와 람다식 (Lambda & Higher-Order Functions) | Minstudio