Kotlin 고차 함수(Higher-Order Functions)
개요
고차 함수(Higher-Order functions)는 함수형 프로그래밍에서 많이 나오는 개념이다.
아래 중 하나 이상을 만족하면 고차 함수이라고 한다.
- 하나 이상의 함수를 인자로 받는다.
- 함수를 결과로 반환한다.
이는 일급 객체(First-class Function)이 성립되는 3조건 중 2개를 만족하는 것이고, 이를 만족하지 못하는 다른 모든 함수들은 일차 함수(first-order function)라고 한다.
즉, 함수를 만드는 함수라고 할 수 있다.
대표적인 고차 함수로는 map
, filter
, reduce
, lambda
등이 있다.
고차 함수
아래 예제는 함수를 인자로 받고 함수를 결과로 반환해 준다.
fun returnParamFunc(func: () -> String): () -> String {
return func
}
fun main() {
val hello: () -> String = { "Hello world!" }
val returned = returnParamFunc(hello)
print("${returned()}")
}
Output:
Hello world!
위에 예제의 returnParamFunc
함수는 인자로 hello
를 받고 다시 함수 반환하고 있다. 이 반환된 함수는 "Hello world!"
를 출력하였다.
인자 및 반환 타입
fun returnParamFunc(func: () -> String): () -> String {
return func
}
함수를 인자로 넘길 때 함수의 변수 이름 뒤에 : () -> String
와 같이 함수의 타입을 명시해야 한다.
Int
를 인자로 받고 String
을 반환하는 함수는 (Int) -> String
와 같이 작성한다. ->
의 왼쪽에 괄호 안에 있는 타입((Int)
)은 인자이고, ->
의 오른쪽의 타입(String
)은 반환 타입을 의미한다.
만약 인자로 Int
를 두개 넘긴다면 (Int, Int) -> String
와 같이 작성한다. 더 많은 인자를 넘겨야 한다면 인자를 더 추가하면 된다. 인자가 없다면 () -> String
와 같이 빈 괄호만 작성하면 된다.
반환값이 없다면(Int, Int) -> Unit
와 같이 Unit
을 넣으면 된다.
참고
최종 수정 : 2021-11-23