커링(currying) : 여러개의 매개변수 받는 함수를 분리 -> 단일매개변수로 받는 체인 함수
아래의 예시를 보자.
fun addTwo(a : Int, b : Int) : Int = a+b
fun addTwoCurried(a : Int) : {b : Int -> { a+b } }
addTwo와 같이 a,b 두개의 매개변수로 받는 함수를 addTwoCurried와 같이 매개 변수 하나씩 받으며 하나의 체인으로 연결되는 함수를 의미한다.
addTwo(1,2) 와 addTwoCurried(1)(2) 와 동일한 3을 출력한다.
커링으로 변환해주는 함수는 아래와 같을 것이다.
fun addTwo(a : Int, b : Int) : Int = a+b
fun addTwoCurried(a : Int) : {b : Int -> { a+b } }
fun main(args : Array<String>){
println(addTWo(1,2)) // 3
val partial = addTWoCurried(1)
val ret = partial(2)
println(ret) // 3
println(addTwoCurried(1)(2)) // 3
}
3개의 println모두 같은 결과를 출력한다.
- 커링의 장점
1. 부분 적용함수(위의 예시에서는 partial 변수) 를 다양하게 재사용 가능
2. 마지막 매개변수가 입력될 떄까지 함수의 실행을 늦출 수 있다.
-> lazy evaluation과 관련있어 보인다.
- Lazy evaluation/(느긋한 계산법)의 특징
1. 실행을 더 빠르게 한다.
2. 복합 수식을 계산할 때 오류 상태를 피할 수 있다.
3. 무한 자료 구조 사용가능
참고문헌
느긋한 계산법 : https://ko.wikipedia.org/wiki/%EB%8A%90%EA%B8%8B%ED%95%9C_%EA%B3%84%EC%82%B0%EB%B2%9
코틀린으로 배우는 함수형 프로그래밍 (조재용, 우명인 지음) 인사이트
728x90
반응형
'프로그래밍 > 프로그래밍언어' 카테고리의 다른 글
[4장 고차함수] 4.5 합성 함수 (0) | 2021.12.06 |
---|---|
[4장 고차함수] 커링함수 - 확장함수 만들기 (0) | 2021.12.03 |
[4장 고차함수] 4.3 부분 적용 함수 (0) | 2021.11.30 |
[4장 고차함수] 4.2 부분함수 (0) | 2021.11.29 |
[4장 고차함수] 고차함수란 (0) | 2021.11.28 |