Kotlin Label 완벽 가이드 - break, continue, return 제어 흐름 다루기
✨ 개요
Kotlin에서는 break
, continue
, return
같은 흐름 제어 키워드를 사용할 때 Label(레이블)을 함께 사용하면
더욱 유연하게 흐름을 제어할 수 있습니다. 특히 중첩 루프, 고차 함수에서 코드 가독성을 높여주는 매우 유용한 기능입니다.
이번 포스팅에서는 Kotlin Label의 개념부터 사용법, 예시, 실무 팁, 면접 질문까지 모두 정리해드리겠습니다.
1️⃣ Kotlin Label이란?
- Label(레이블)이란 코드에서 특정 위치를 명시적으로 가리키기 위한 이름표(Tag)입니다.
- Kotlin에서는 @레이블명 형태로 사용하며, 주로
break
,continue
,return
과 함께 사용되어 특정 범위나 블록에서 빠져나갈 때 활용합니다.
2️⃣ Label 기본 사용법
Label 선언 방법
label@ for (i in 1..5) {
for (j in 1..5) {
if (j == 3) break@label
println("i = $i, j = $j")
}
}
사용 가능한 키워드
break@label
지정된 레이블리 붙은 반복문 종료continue@label
지정된 레이블이 붙은 반복문으로 이동return@label
지정된 람다, 익명함수 종료 (고차 함수에서 유용)
3️⃣ 실전 예제
3-1. 중첩 반복문 탈출 (break@label)
outer@ for (i in 1..3) {
for (j in 1..3) {
if (j == 2) break@outer
println("i=$i, j=$j")
}
}
// 결과: i=1, j=1
3-2. 중첩 반복문 건너뛰기 (continue@label)
outer@ for (i in 1..3) {
for (j in 1..3) {
if (j == 2) continue@outer
println("i=$i, j=$j")
}
}
// 결과: i=1, j=1 / i=2, j=1 / i=3, j=1
3-3. 람다에서 return 제어 (return@label)
fun main() {
listOf(1, 2, 3).forEach label@{
if (it == 2) return@label
println(it)
}
println("Done")
}
// 결과: 1 / 3 / Done
3-4. 암묵적 레이블 사용 (람다 이름으로 대체)
fun main() {
listOf(1, 2, 3).forEach {
if (it == 2) return@forEach
println(it)
}
println("Done")
}
4️⃣ Label 필요성
상황 | Label 유용성 |
---|---|
중첩 반복문 | 특정 루프 명확하게 종료 또는 건너뛰기 |
고차 함수 (람다) | 내부 return 명확히 구분 |
5️⃣ 결론
- 반복문, 고차 함수에서 흐름 제어에 사용
- 중첩 루프, 람다의 return 처리 시 유용
- @label 형태로 지정, 남발은 피할 것
- 가독성과 명확한 흐름 제어를 위해 적절히 사용