Kotlin/포스팅

코틀린 함수 타입

짜집퍼박사(짜박) 2023. 12. 30. 23:20

코틀린에서 함수 타입은 함수를 값으로 다룰 수 있도록 하는 개념입니다. 함수 타입은 함수의 시그니처를 표현하며, 변수나 매개변수 등에 할당되거나 전달될 수 있습니다. 함수 타입을 사용하면 고차 함수를 정의하거나 함수를 다룰 때 유연성을 제공합니다.

 

함수 타입의 기본 형식

코틀린에서 함수 타입은 (매개변수 타입) -> 반환 타입의 형식을 갖습니다. 여기서 매개변수 타입은 함수가 받는 인자의 타입이고, 반환 타입은 함수의 반환 값의 타입입니다.

// (Int, Int) -> Int 타입의 함수 선언
val sum: (Int, Int) -> Int = { a, b -> a + b }

// (String) -> Unit 타입의 함수 선언
val printMessage: (String) -> Unit = { message -> println(message) }

 

함수 타입을 매개변수로 사용하기

fun operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

fun main() {
    val add: (Int, Int) -> Int = { x, y -> x + y }
    val subtract: (Int, Int) -> Int = { x, y -> x - y }

    println(operateOnNumbers(5, 3, add))       // 출력: 8
    println(operateOnNumbers(10, 4, subtract))  // 출력: 6
}

 

함수 타입을 반환 값으로 사용하기

fun getCalculator(operator: String): (Int, Int) -> Int {
    return when (operator) {
        "+" -> { a, b -> a + b }
        "-" -> { a, b -> a - b }
        "*" -> { a, b -> a * b }
        "/" -> { a, b -> a / b }
        else -> throw IllegalArgumentException("Unknown operator")
    }
}

fun main() {
    val addFunction = getCalculator("+")
    println(addFunction(3, 5))  // 출력: 8

    val multiplyFunction = getCalculator("*")
    println(multiplyFunction(4, 6))  // 출력: 24
}

 

함수 타입과 Nullable 함수 타입

fun handleNullableFunction(fn: ((Int) -> Int)?) {
    if (fn != null) {
        val result = fn(10)
        println(result)
    } else {
        println("Function is null")
    }
}

fun main() {
    val addTen: (Int) -> Int = { it + 10 }
    handleNullableFunction(addTen)  // 출력: 20

    val nullFunction: ((Int) -> Int)? = null
    handleNullableFunction(nullFunction)  // 출력: Function is null
}

함수 타입은 코틀린에서 함수형 프로그래밍을 지원하고, 고차 함수와 함께 사용되어 코드의 간결성과 유연성을 높여줍니다. 함수 타입은 다양한 상황에서 함수를 값으로 다룰 수 있도록 해주므로, 함수형 프로그래밍 개념을 적용할 때 중요한 역할을 합니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코틀린 익명 함수  (0) 2023.12.31
코틀린 람다 함수  (0) 2023.12.31
코틀린 고차 함수  (0) 2023.12.30
코틀린 객체 식  (0) 2023.12.30
코틀린 동반 객체  (0) 2023.12.30