Kotlin - 일급함수(First-class functions)에 대해서 알아보기

First-class functions는 일급함수로 변역됩니다. 최근에 만들어진, 함수형 프로그래밍을 지원하는 언어들은 대부분 일급함수를 지원하고 있습니다. JAVA8도 최근 일급함수를 지원하기 시작하였습니다. 일급함수는 고차함수(Higher-order-functions), 람다표현식(Lambda expression) 등을 이해하는데 알아야하는 개념입니다.

일급함수는 객체로 취급되는 함수를 의미하며 다음과 같은 특징을 갖고 있습니다.

  • 일급함수는 함수가 객체로 취급될 수 있습니다.
  • 일급함수는 함수 객체를 인자로 넘길 수 있어야 합니다.
  • 일급함수는 함수 객체를 인자로 넘길 수 있어야 합니다.

각각의 내용들이 무엇인지 예제와 함께 알아보겠습니다.

일급함수는 함수가 객체로 취급될 수 있습니다

아래 코드에서 변수 hellohello world를 리턴하는 함수를 할당할 수 있습니다.

val hello: () -> String = {"hello world"}

일급함수는 함수 객체를 인자로 넘길 수 있어야 합니다

아래 코드에서 printHello는 인자로 스트링을 리턴하는 함수를 받고 있습니다. main을 보시면 printHellohello를 인자로 넘길 수 있습니다.

val hello: () -> String = {"hello world"}
fun printHello(func: ()->String) {
    print("${func()}")
}

fun main(args: Array<String>) {
    printHello(hello)
}

실행 결과

hello world

일급함수는 함수 객체를 함수의 결과로 리턴할 수 있습니다

아래 코드에서 returnHello는 리턴 값으로 스트링을 리턴하는 함수를 리턴합니다. main에서는 이 함수를 받아 호출하여 hello world라는 스트링을 출력했습니다.

val hello: () -> String = {"hello world"}
fun returnHello(): () -> String {
    return hello
}

fun main(args: Array<String>) {
    val returned: ()->String = returnParamFunc(hello)
    print("${returned()}")
}

실행 결과

hello world

정리

일급함수의 정의와 의미에 대해서 간단히 알아보았습니다. 언어가 일급함수를 지원한다는 것은 고차함수(Higher order functions)를 사용할 수 있다는 것과 같습니다. 함수형 프로그래밍을 공부하다보면 두개의 개념이 자주 나옵니다. 의미에 대해서 미리 알아두면 함수형 프로그래밍을 공부하는데 도움이 됩니다.

참고

Loading script...
codechachaCopyright ©2019 codechacha