PHpullh
학습 라이브러리/Kotlin/커링 (Currying)

KOTLIN · 함수

커링 (Currying)

다중 인수 함수를 단일 인수 함수의 체인으로 변환하는 기법입니다. Kotlin에서 수동으로 커링을 구현합니다.

함수고급curryinghigher-orderpartial-applicationfunctional

핵심 설명

다중 인수 함수를 단일 인수 함수의 체인으로 변환하는 기법입니다. Kotlin에서 수동으로 커링을 구현합니다.

Kotlin code

// 커링 유틸리티
fun <A, B, C> ((A, B) -> C).curried(): (A) -> (B) -> C =
    { a -> { b -> this(a, b) } }

fun <A, B, C, D> ((A, B, C) -> D).curried(): (A) -> (B) -> (C) -> D =
    { a -> { b -> { c -> this(a, b, c) } } }

fun add(a: Int, b: Int) = a + b
fun formatLog(level: String, tag: String, msg: String) =
    "[$level][$tag] $msg"

fun main() {
    // 2인자 커링
    val curriedAdd = ::add.curried()
    val add5 = curriedAdd(5)
    println(add5(3))     // 8
    println(add5(10))    // 15

    // 3인자 커링
    val curriedLog = ::formatLog.curried()
    val errorLog = curriedLog("ERROR")
    val dbErrorLog = errorLog("DB")
    println(dbErrorLog("연결 실패"))
    println(dbErrorLog("타임아웃"))
}

학습 팁

커링은 로깅, 설정, 검증 등에서 공통 파라미터를 미리 바인딩할 때 유용합니다.

주의할 점

커링된 함수를 과도하게 사용하면 타입 시그니처가 복잡해집니다. 간단한 경우 기본값 파라미터가 더 읽기 쉽습니다.

자주 묻는 질문

커링 (Currying)란 무엇인가요?

다중 인수 함수를 단일 인수 함수의 체인으로 변환하는 기법입니다. Kotlin에서 수동으로 커링을 구현합니다.

커링 (Currying) 학습 시 주의할 점은 무엇인가요?

커링된 함수를 과도하게 사용하면 타입 시그니처가 복잡해집니다. 간단한 경우 기본값 파라미터가 더 읽기 쉽습니다.