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) 학습 시 주의할 점은 무엇인가요?
커링된 함수를 과도하게 사용하면 타입 시그니처가 복잡해집니다. 간단한 경우 기본값 파라미터가 더 읽기 쉽습니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.