Kotlin/포스팅

코틀린 비지역적 제어 흐름

짜집퍼박사(짜박) 2023. 12. 31. 02:54

코틀린에서의 "비지역적 제어 흐름"은 주로 return 키워드가 사용되는 함수 또는 람다 내에서 특별한 제어 흐름을 의미합니다. 이는 주로 람다 함수, 익명 함수, 또는 중첩 함수 등에서 사용됩니다.

 

람다 함수에서의 비지역적 제어 흐름

코틀린에서는 람다 함수에서 return 키워드를 사용하면 람다 함수가 아닌 람다를 감싸고 있는 함수를 빠져나가게 됩니다. 이러한 동작을 비지역적(non-local) 제어 흐름이라고 합니다.

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5)

    // forEach의 람다에서 return은 main 함수를 빠져나가게 됨
    numbers.forEach {
        if (it == 3) {
            return
        }
        println(it)
    }

    println("This line will not be reached")
}

위의 예제에서 forEach의 람다 함수 내에서 return을 사용하면 main 함수 전체에서 빠져나가게 됩니다. 즉, println("This line will not be reached")는 실행되지 않습니다.

 

레이블과 함께 사용하는 비지역적 제어 흐름

비지역적 제어 흐름에 레이블(label)을 사용하면, 특정 위치로 직접 점프하여 제어 흐름을 변경할 수 있습니다. 이는 람다 함수 내에서 return@label과 같은 형태로 사용됩니다.

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5)

    numbers.forEach outer@{
        if (it == 3) {
            return@outer
        }
        println(it)
    }

    println("This line will be reached")
}

여기서 outer@는 레이블을 정의하고 있습니다. return@outer는 해당 레이블로 돌아가는 것을 의미합니다. 따라서 위의 예제에서는 it == 3일 때 람다를 빠져나가지 않고 계속 반복하여 출력하게 됩니다.

비지역적 제어 흐름과 레이블을 사용할 때에는 코드의 가독성과 유지보수를 고려하여 적절히 사용해야 합니다. 사용 시 주의가 필요하며, 필요한 경우에 한정적으로 사용하는 것이 좋습니다.

 

With ChatGPT

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

코틀린 확장 프로퍼티  (0) 2023.12.31
코틀린 확장 함수  (0) 2023.12.31
코틀린 인라인 함수와 프로퍼티  (0) 2023.12.31
코틀린 호출 가능 참조  (0) 2023.12.31
코틀린 익명 함수  (0) 2023.12.31