• 목록 (128)
    • Android (62)
    • Back-End (2)
    • Java (3)
    • Kotlin (16)
    • CS (7)
    • 개발 서적 (12)
    • 문제 풀이 (26)

최근 글

티스토리

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
MJ_94

한 우물만 파는 기술 블로그

[Kotlin] 커링(Currying) 함수
Kotlin

[Kotlin] 커링(Currying) 함수

2021. 8. 3. 14:19

여러 개의 매개 변수를 받는 함수를 분리하여, 단일 매개 변수만 받는 부분 적용 함수의 체인으로 만드는 방법이다.

함수형 프로그래밍에서 커링을 사용하는 이유는 다양한 재사용과 마지막 매개변수가 입력될 때까지 함수의 실행 타이밍을 조절할 수 있다.

아래 코드는 코틀린의 확장함수를 사용하여 multiThree 함수와 같이 매개변수가 3개인 커링 함수를 일반화 하는 과정이다.

curried() 확장 함수를 사용하여 매개변수가 3개인 함수를 커링 함수로 변환할 수 있다.

반대로 커링 함수를 일반 함수로 변환하는 unCurried() 함수도 구현했다.

class Currying {

    fun <P1, P2, P3, R> ((P1, P2, P3) -> R).curried(): (P1) -> (P2) -> (P3) -> R =
        { p1: P1 -> { p2: P2 -> { p3: P3 -> this(p1, p2, p3) } } }

    fun <P1, P2, P3, R> ((P1) -> (P2) -> (P3) -> R).uncurried(): (P1, P2, P3) -> R =
        { p1: P1, p2: P2, p3: P3 -> this(p1)(p2)(p3) }

    val multiThree = { a: Int, b: Int, c: Int -> a * b * c }
    val curried = multiThree.curried()

    val uncurried = curried.uncurried()


    fun print(){
        print(curried)   // 6
        print(uncurried) // 6
    }
}

'Kotlin' 카테고리의 다른 글

[Kotlin] Flow  (0) 2021.08.13
[Kotlin] 리스트를 통한 명령형 방식과 함수형 방식 비교  (0) 2021.08.04
[Kotlin] Tailrec  (0) 2021.08.02
[Kotlin] Sealed Class  (0) 2021.07.30
[코틀린] apply, with, let, also, run의 용도  (0) 2021.03.17
    'Kotlin' 카테고리의 다른 글
    • [Kotlin] Flow
    • [Kotlin] 리스트를 통한 명령형 방식과 함수형 방식 비교
    • [Kotlin] Tailrec
    • [Kotlin] Sealed Class
    MJ_94
    MJ_94
    안드로이드, 개발 관련 기술 블로그

    티스토리툴바