더북(TheBook)

레이블

단순한 breakcontinue는 자신이 속한 루프의 범위보다 더 밖으로 점프할 수 없다. 그러나 레이블을 사용하면 breakcontinue가 자신을 둘러싼 여러 루프의 경계 중 한군데로 점프할 수 있어서 현재 실행 중인 맨 안쪽 루프의 영역에 제한되지 않고 점프할 수 있다.

레이블@’과 같이 레이블 이름 다음에 @을 사용해 레이블을 붙일 수 있다. 다음 코드에서 레이블 이름은 outer이다.

BreakAndContinue/ForLabeled.kt

import atomictest.eq

fun main() {
  val strings = mutableListOf<String>()
  outer@ for (c in 'a'..'e') {
    for (i in 1..9) {
      if (i == 5) continue@outer
      if ("$c$i" == "c3") break@outer
      strings.add("$c$i")
    }
  }
  strings eq listOf("a1", "a2", "a3", "a4",
    "b1", "b2", "b3", "b4", "c1", "c2")
}

레이블이 붙은 continue@outerouter@이 붙은 루프의 실행을 계속한다. 레이블이 붙은 break@outerouter@이 붙은 루프의 마지막을 찾아서 거기서부터 실행을 계속한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.