PHpullh
학습 라이브러리/Kotlin/람다 & 고차함수

KOTLIN · 함수형

람다 & 고차함수

함수를 일급 객체로 다루는 Kotlin의 함수형 프로그래밍 핵심.

함수형중급lambda람다고차함수HOFfunction-type

핵심 설명

함수를 일급 객체로 다루는 Kotlin의 함수형 프로그래밍 핵심.

Kotlin code

// 함수 타입
val double: (Int) -> Int = { n -> n * 2 }
val greet: (String) -> String = { "Hello, $it!" }  // it: 단일 파라미터
val add: (Int, Int) -> Int = { a, b -> a + b }

// 고차함수 — 함수를 파라미터로 받기
fun transform(list: List<Int>, fn: (Int) -> Int) =
    list.map(fn)

// 고차함수 — 함수를 반환하기
fun multiplier(factor: Int): (Int) -> Int = { it * factor }

// 함수 합성
infix fun <A, B, C> ((A) -> B).then(g: (B) -> C): (A) -> C =
    { g(this(it)) }

// 메서드 참조
fun isPositive(n: Int) = n > 0
val nums = listOf(-3, -1, 0, 2, 5)
val pos = nums.filter(::isPositive)
val strs = nums.map(Int::toString)

fun main() {
    println(transform(listOf(1,2,3), double))   // [2, 4, 6]
    println(transform(listOf(1,2,3)) { it * it }) // trailing lambda

    val triple = multiplier(3)
    println(triple(7))   // 21

    val process = double then { it + 1 } then { "$it!" }
    println(process(5))  // "11!"
}

학습 팁

마지막 인자가 람다이면 괄호 밖으로 꺼낼 수 있습니다(trailing lambda). 인자가 람다 하나뿐이면 괄호를 생략할 수 있습니다.

주의할 점

람다 내에서 return은 람다를 포함하는 함수 전체에서 반환합니다(non-local return). 람다만 종료하려면 return@label을 사용하세요.

자주 묻는 질문

람다 & 고차함수란 무엇인가요?

함수를 일급 객체로 다루는 Kotlin의 함수형 프로그래밍 핵심.

람다 & 고차함수 학습 시 주의할 점은 무엇인가요?

람다 내에서 return 은 람다를 포함하는 함수 전체에서 반환합니다(non-local return). 람다만 종료하려면 return@label 을 사용하세요.