References: Do it! 코틀린 프로그래밍

코틀린에서의 라벨에 대해 알아봅니다.

 

 

1. 라벨

 

라벨이란 코드에서 특정 위치를 임의로 표기한것을 말합니다. @를 통해 사용할 수 있습니다.

@position

 

 

2. 람다식에서 라벨의 사용.

 

람다식을 포함한 함수에서 람다식에서의 리턴은 비지역 반환을 초래한다고 지난 글에서 다뤘습니다.

라벨을 이용하면 람다함수의 비지역 반환을 방지할 수 있습니다.

 

다음 예시코드는 라벨을 사용하여 람다함수의 비지역 반환을 방지하는 코드입니다.

 

fun lambdaFun(a: Int, b: Int, out: (Int, Int)->Unit) = out(a, b)
fun returnFun() {
    println("Start of returnFun")
    lambdaFun(10, 20)/** Start of lbl label. */lbl@{ a, b ->
        var result = a+b
        if(result >10) { return@lbl }
        println("result: $result")
    } /** End of lbl label. */
}
fun main() {
    returnFun()
}

 

lbl@ 를 통해 라벨을 지정하였습니다. 라벨이 유효한 범위는 람다식 한 블럭입니다.

실행결과는 다음과 같습니다.

 

 

3. 암묵적 라벨

 

람다 함수에는 위 처럼 명시적으로 라벨을 지정해 줄 수도 있지만 기본적으로 암묵적 라벨이라는것이 존재합니다.

암묵적라벨은 람다함수의 이름으로 자동 설정됩니다.

 

예를 들어 위의 코드를 암묵적 라벨을 사용하는 코드로 바꾸면 다음과 같습니다.

 

fun lambdaFun(a: Int, b: Int, out: (Int, Int)->Unit) = out(a, b)
fun returnFun() {
    println("Start of returnFun")
    lambdaFun(10, 20){ a, b ->
        var result = a+b
        if(result >10) { return@lambdaFun }
        println("result: $result")
    } 
}
fun main() {
    returnFun()
}

 

람다함수의 이름이 자동으로 암묵적 라벨로 설정되어 별도의 라벨 지정 작업 없이 lambdaFun라벨을 사용할 수 있습니다.

 

 

4. 라벨의 응용

 

break/continue에 대해서도 라벨을 사용할 수 있습니다.

 

fun labelBreak (){
    println("labelBreak")
    first@for(i in 1..5){
        second@for(j in 1..5){
            if(j == 3){ break@first }
            println("i: $i, j: $j")
        }
        println("After for j")
    }
    println("After for i")
}

 

위와 같이 이중 루프문을 탈출하는데 쓸 수 있으며

 

fun labelContinue() {
    println("labelContinue")
    first@for(i in 1..5){
        second@for(j in 1..5){
            if(j == 3){ continue@first }
            println("i: $i, j: $j")
        }
        println("After for j")
    }
    println("After for i")
}

 

위와 같이 뒤의 작업을 스킵할 떄 사용할 수도 있습니다.

 

 

 

 

반응형

'Programming' 카테고리의 다른 글

[Kotlin] 21. 생성자  (0) 2019.08.24
[Kotlin] 20. 예외 처리  (0) 2019.08.24
[Kotlin] 18. 반복문  (0) 2019.08.23
[Kotlin] 17. 조건문  (0) 2019.08.23
[Kotlin] 16. 꼬리 재귀 함수  (0) 2019.08.23

+ Recent posts