Developer Geek

Higher-Order Function(고차함수)란 in Kotlin 본문

안드로이드

Higher-Order Function(고차함수)란 in Kotlin

devGeek 2022. 6. 14. 15:01
반응형

Higher-Order Functions 란

Higher-Order Functions(고차함수)란 함수의 인자로 다른 함수를 받거나 또는 함수 자체를 반환하는 함수이다.

함수 인자로 함수를 받는 고차함수


fun calculate(x: Int, y: Int, operation: (Int, Int) -> Int): Int {  // 1
    return operation(x, y)                                          // 2
}

fun sum(x: Int, y: Int) = x + y                                     // 3

fun main() {
    val sumResult = calculate(4, 5, ::sum)                          // 4
    val mulResult = calculate(4, 5) { a, b -> a * b }               // 5
    println("sumResult $sumResult, mulResult $mulResult")
}

  1. 고차함수를 정의하는 부분이다. 여기서는 정수형 인자 x, y를 받는다. 추가적으로 하나의 함수 operation을 받는데, 이 함수는 또 calculate함수의 리턴에도 사용된다.
  2. 고차함수는 operation함수의 결과값을 반환한다.
  3. operation에 대입될 함수(sum)를 정의한다.
  4. 고차함수(calculate)에 정수형 인자로 2개의 정수와 함수 인자로 ::sum을 담아 호출한다. (::는 이름으로 함수를 참조하는 코틀린 표기법이다.)
  5. 고차함수(calculate)를 호출하는데 이번에는 함수형 인자에 정의된 함수를 담는 것이 아니라 람다 표현식을 이용해서 함수를 담는다.(람다식을 사용하는게 훨씬 깔끔해보이지 않나??)

함수를 반환하는 고차함수

fun operation(): (Int) -> Int {                                     // 1
    return ::square
}

fun square(x: Int) = x * x                                          // 2

fun main() {
    val func = operation()                                          // 3
    println(func(2))                                                // 4
}

  1. 함수를 반환하는 고차함수를 정의한다. (Int) -> Int는 인자와 반환형을 나타낸다. 위 코드에서는 square함수의 인자와 반환형을 나타낸다.
  2. operation고차함수에서 반환하는 square함수를 정의한다.
  3. func 변수에 operation 고차함수의 반환값을 저장한다. 여기서는 func변수는 operation의 반환값인 square함수를 저장한다.
  4. func함수를 호출한다. 정확히는 square(2)가 호출되어 출력된다.

참고 문서

Higher-Order Functions - Kotlin Playground

질문과 잘못된 점에 대해 말씀해주시는 건 언제나 환영입니다.
zero5.two4@gmail.com

반응형
Comments