Android 개발/Android

함수안에 함수 넣기 # Closure Local functions Kotlin

Developer88 2023. 4. 15. 00:00
반응형

오늘은 Kotlin에서 함수안에 함수를 넣는 것에 대해서 정리해 보도록 하겠습니다.

 

 

1. 함수안에 함수

코틀린에서는 local function 즉, 함수안에 다른 함수를 넣는 것이 가능합니다.

 

fun main() {
    fun hello(name: String) {
        println("Hello, $name!")
    }

    hello("김군")
    hello("홍군")
}

 

 

2. Clousure

함수안에 함수를 사용할 때는 Closure라는 개념이 들어갑니다.

쉽게 말해서, 함수 바깥의 범위에 들어가 있는 변수의 값에 접근하는 것이 가능하다는 것 입니다.

아래의 calculateDiscount 함수는 바깥에 있는 price와 discountPercentage에 접근이 가능한 것도 이것 때문입니다.

원래는 global한 범위로 선언되지 않은 다른 함수의 범위에 접근할 수는 없지요.

 

fun calculateFinalPrice(price: Double, discountPercentage: Double): Double {
    fun calculateDiscount(): Double {
        return price * (discountPercentage / 100)
    }
    val discount = calculateDiscount()
    return price - discount
}

 

 

3. exception handler 사용예

이렇게 함수안에 함수를 사용하면 다양한 활용이 가능해지는데요.

아래와 같이 함수안에 exception handler 를 사용하는 것도 가능해 집니다.

여기서는 Exception을 핸들할 때 특별한 것이 없지만,

이 함수의 Exception 처리할 때 해야하는 특정한 과업들이 있을 때는,

맥락을 벗어나지 않으면서 함수를 처리할 수 있어서 좋습니다.

 

fun processData(data: String) {
    fun handleException(e: Exception, message: String) {
        e.printStackTrace()
    }

    try {
        val processedData = data.toInt() * 2
    } catch (e: NumberFormatException) {
        handleException(e, "Input data is not a valid number")
    } catch (e: Exception) {
        handleException(e, "An unexpected error occurred")
    }
}

 

이상으로 Kotlin의 Local Function 에 대해서 정리해 보았습니다.

 

728x90