Swift Closure [Swift] Currying

[Swift] Currying

수학과 컴퓨터 과학에서 커링(currying)이란 다중 인수 (혹은 여러 인수의 튜플)을 갖는 함수를 단일 인수를 갖는 함수들의 함수열로 바꾸는 것을 말한다.
모지즈 쇤핑클에 의해 도입되었고, 이후 해스켈 커리에 의해 발전하였다.

장점

작은 함수단위로 세분화가 가능하다. 세분화된 함수는 재사용이 용이하다. 가독성을 높여준다.

// 일반적인 함수
func add(_ num1: Int, _ num2: Int) -> Int {
    return num1 + num2
}
add(1, 2)
// 커링
func add(_ num1: Int) -> ((Int) -> Int) {
    return { num2 in
        return num1 + num2
    }
}
add(1)(2)

// 제네릭을 이용한 커링
func curry<A, B, C>(_ fn: @escaping (A, B) -> C) -> (A) -> (B) -> C {
    return { (a: A) in
        return { (b: B) in
            return fn(a, b)
        }
    }
}

출처

Functional Swift — Currying

댓글남기기