Kotlin - 고차 함수(higher-order function)

하동혁 ·2023년 4월 13일
0

Kotlin

목록 보기
9/10
post-thumbnail

고차 함수

코틀린에서 고차함수(higher-order function)란, 함수를 인자로 전달하거나 함수를 반환하는 함수를 말합니다. 이러한 고차함수는 함수형 프로그래밍에서 자주 사용되며, 코드의 재사용성과 가독성을 높여줍니다.

고차함수를 사용하면 함수를 일급 객체(first-class citizen)로 다룰 수 있습니다. 이는 함수를 변수나 데이터 구조체에 할당하고, 다른 함수의 인자로 전달하거나, 반환값으로 사용할 수 있다는 것을 의미합니다. 따라서 고차함수를 사용하면 함수를 더욱 유연하게 활용할 수 있습니다.

코틀린에서 고차함수를 작성하는 방법은 간단합니다. 함수 인자를 받는 함수의 경우, 인자로 받을 함수의 시그니처(signature)를 함수 타입으로 지정하면 됩니다. 함수를 반환하는 함수의 경우, 반환할 함수의 시그니처를 반환 타입으로 지정하면 됩니다


// 함수를 인자로 받는 고차함수
fun doSomethingWithNumber(num: Int, operation: (Int) -> Int): Int {
    return operation(num)
}

// 함수를 반환하는 고차함수
fun getOperation(op: String): (Int) -> Int {
    return when (op) {
        "+" -> { num -> num + 1 }
        "-" -> { num -> num - 1 }
        "*" -> { num -> num * 2 }
        else -> throw IllegalArgumentException("Unsupported operation: $op")
    }
}

// 고차함수 사용 예시
val result = doSomethingWithNumber(5) { num -> num * 2 } // 마지막 인자는 { }로 뺄 수 있음 -> 주로 메서드를 마지막에 위치하게 합니다. 
println(result) // 출력 결과: 10

val operation = getOperation("+")
val result2 = operation(5)
println(result2) // 출력 결과: 6

doSomethingWithNumber( ) 함수는 인자로 Int형 값과 함수를 받습니다.

getOperation( ) 함수는 인자로 String형 값 하나를 넘기고, 반환형이 함수입니다. 그러므로 when문에 해당하는 함수를 반환합니다.



  • 람다식 함수에서 반환 자료형이 없거나 매개변수가 하나만 있는 경우 예시
val printMessage = { message: String ->
    println(message)
}

// 사용 예시
printMessage("Hello, world!")

  • 매개변수가 하나만 있는 람다식 함수 예시
val doubleNumber = { num: Int ->
    num * 2
}

// 사용 예시
val result = doubleNumber(5)
println(result) // 출력 결과: 10

0개의 댓글