HOME > kotlin > basic

Kotlin - 고계함수(Higher-Order Functions)에 대해서 알아보기

JSFollow08 Mar 2019

Higher-Order Functions는 고계(고차)함수로 변역됩니다. 함수의 인자로 함수를 넘기거나, 함수를 리턴하는 함수를 말합니다. 고차함수를 이해하려면 먼저 일급함수(First class functions)를 알아야 합니다. 일급함수를 지원한다는 의미는 고차함수를 사용할 수 있다는 의미입니다.

고차함수

아래 코드는 고차함수의 특징을 보여줍니다. returnParamFunc는 함수를 인자로 받고 함수를 결과로 리턴해줍니다.

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

fun returnParamFunc(func: ()->String): () -> String {
    return func
}

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

위의 코드에서 main을 보시면 인자로 hello함수를 넘겨주고 결과로 함수를 받습니다. 그리고 리턴받은 함수를 호출하여 hello world를 출력하였습니다.

실행 결과

hello world

인자 및 리턴 타입

인자로 함수를 넘길 때 변수 이름 뒤에 : ()->String처럼 함수의 타입을 명시해야 합니다.

Int를 인자로 받고 String을 리턴하는 함수는 (Int)->String처럼 표현합니다. ->의 왼쪽이 인자, ->의 오른쪽이 리턴값을 의미합니다. 인자는 괄호로 묶어주어야 합니다.

fun returnParamFunc(func: ()->String): () -> String {
    return func
}

만약 인자로 Int를 두개 넘긴다면 (Int, Int)->String처럼 표현할 수 있습니다. 더 많은 인자를 넘기고 싶으시면 인자를 더 추가하시면 됩니다. 인자가 없다면 ()->String처럼 괄호 안의 내용을 비우면 됩니다.

리턴값이 없다면 Unit을 사용하시면 됩니다. (Int, Int)->Unit처럼 표현할 수 있습니다.

정리

고계함수의 의미에 대해서 알아보았고 간단한 코드로 어떻게 사용되는지 알아보았습니다.

참고