Kotlin 일급 함수(First-class functions)
개요
최근에 만들어진, 함수형 프로그래밍을 지원하는 언어들은 대부분 일급 함수(First-class functions)를 지원하고 있다. Java8도 최근 일급 함수를 지원하기 시작하였다.
일급 함수란? 프로그램 언어에서 함수를 값으로 다룰 수 있는 것을 말한다. 즉, 일급 함수는 객체로 취급되는 함수를 의미한다.
일급 함수는 다음과 같은 특징을 갖는다.
- 변수에 할당(assignment)할 수 있다.
- 다른 함수(혹은 메소드)를 인자(parameter)로 전달할 수 있다.
- 다른 함수(혹은 메소드)의 반환값(return value)로 전달할 수 있다.
Kotlin에서도 함수를 다른 값과 마찬가지로 변수에 할당하거나 인수로 함수에 전달하거나 반환 값으로 받을 수 있다. 이와 같이 다른 값과 같은 형태가 된 함수를 편의상 함수 객체(function object)라고 부른다.
변수에 할당(assignment)할 수 있다.
아래 예제에서 함수를 변수로 할당하고 있다.
fun main() {
val hello: () -> String = { "Hello world!" }
println(hello())
}
Output:
Hello world!
위 예제에서는 변수hello에 "Hello world!" 문자열을 반환하는 함수를 할당하고 있다.
다른 함수(혹은 메소드)를 인자(parameter)로 전달할 수 있다.
아래 예제에서 함수를 인자로 전달하고 있다.
fun printlnFunc(func: () -> String) {
println("${func()}")
}
fun main() {
val hello: () -> String = { "Hello world!" }
printlnFunc(hello)
}
Output:
Hello world!
위 예제에서 printlnFunc() 함수에서는 인자로 문자열을 리턴하는 함수를 받고 있다. main()을 보면 printlnFunc() 함수에 hello 함수 변수를 넘기고 있다.
다른 함수(혹은 메소드)의 반환값(return value)로 전달할 수 있다.
아래 예제에서 함수를 반환하고 있다.
fun getFunc(): () -> String {
return { "Hello world!" }
}
fun main() {
val returned: () -> String = getFunc()
println("${returned()}")
}
Output:
Hello world!
위 예제에서 getFunc() 함수는 반환값으로 문자열을 반환하는 함수를 반환한다. main() 함수에서는 이 함수를 받아 호출하여 Hello world!라는 문자열을 출력하였다.