밤빵's 개발일지
[TIL]20241105 Label & break/continue 본문
코틀린을 공부하며 반복문을 제어하는 새로운 방식인 라벨(Label)과 break/continue의 조합을 알게 되었다. 자바에서도 break와 continue를 사용해 반복문을 제어할 수 있지만, 코틀린에서는 라벨을 사용하여 특정 반복문을 쉽게 탈출하거나 건너뛸 수 있어 더욱 유연하게 반복문을 제어할 수 있다.
▶라벨(Label)
코틀린에서 라벨(Label)은 특정 코드 블록이나 반복문에 붙여서 그 지점을 식별하는 역할을 한다. 라벨은 @ 기호 뒤에 원하는 이름을 붙여서 생성하고, 특정 반복문이나 코드 블록을 명확히 구분하여 break나 continue 구문을 통해 제어할 수 있다. 라벨을 사용하면 중첩된 반복문에서 원하는 반복문만을 선택적으로 탈출하거나 다음 단계로 건너뛸 수 있어 코드의 가독성과 유연성을 높일 수 있다.
▶라벨과 break를 활용한 반복문 탈출
예를 들어, 중첩된 반복문에서 특정 조건이 발생했을 때 가장 바깥쪽 반복문을 탈출하고 싶다면 라벨을 사용할 수 있다.
fun main() {
outer@ for (i in 1..5) {
for (j in 1..5) {
if (i * j > 10) {
println("Breaking out of outer loop when i=$i and j=$j")
break@outer
}
println("i=$i, j=$j")
}
}
}
→ outer@라는 라벨이 바깥쪽 for문에 붙어 있다. break@outer를 사용해 i * j가 10을 초과하는 조건이 충족되면 가장 바깥쪽 반복문인 outer를 탈출하게 된다. 이로 인해 조건을 만족한 이후에는 모든 반복이 종료된다.
▶라벨과 continue를 활용한 반복 건너뛰기
라벨은 continue와도 함께 사용할 수 있다. 특정 조건이 발생할 때 현재 반복을 건너뛰고 바로 다음 루프로 진행하고자 할 때 라벨과 continue를 조합하여 사용할 수 있다.
fun main() {
outer@ for (i in 1..3) {
for (j in 1..3) {
if (i == j) {
println("Skipping inner loop when i=$i and j=$j")
continue@outer
}
println("i=$i, j=$j")
}
}
}
→ continue@outer를 사용하면 i == j 조건이 충족될 때 현재 내부 for문을 종료하고, 외부 for문의 다음 반복으로 넘어간다. i == j인 경우마다 내부 루프를 건너뛰고 외부 루프의 다음 반복이 시작되기 때문에, 원하는 조건에서 특정 반복을 건너뛸 수 있게 된다.
▶다중 루프 탈출: 라벨과 break의 실전 활용
다중 루프에서는 단순히 break나 continue만으로 원하는 결과를 얻기 어려울 수 있다. 이런 경우 라벨을 사용하면 다중 루프에서도 쉽게 탈출할 수 있다. 예를 들어, 다음과 같이 여러 중첩된 반복문이 있을 때 특정 조건에서 모든 반복문을 종료하고자 할 수 있다.
fun main() {
outer@ for (i in 1..5) {
for (j in 1..5) {
for (k in 1..5) {
if (i * j * k > 20) {
println("Breaking out of all loops when i=$i, j=$j, k=$k")
break@outer
}
println("i=$i, j=$j, k=$k")
}
}
}
}
→ outer@ 라벨을 바깥쪽 for문에 붙이고, 특정 조건을 만족할 때 break@outer를 사용해 모든 반복문을 탈출한다. i * j * k가 20을 초과하는 순간 모든 루프가 종료되고, 조건을 만족한 이후의 반복은 실행되지 않는다. 이 방법을 사용하면 다중 루프 내에서도 유연하게 반복문을 제어할 수 있다.
▶라벨과 break/continue를 사용할 때의 주의사항
라벨과 break/continue는 중첩된 반복문에서 유용하지만, 남용할 경우 코드가 복잡해져 가독성을 해칠 수 있다. 따라서 코드의 흐름을 이해하기 어려운 경우에는 라벨을 사용하기보다 반복문을 더 단순화하거나 함수를 분리하는 것이 좋다. 필요할 때만 라벨을 사용해 코드를 명확하게 유지하는 것이 중요하다.
▶자바와 코틀린의 차이점
자바에서도 break와 continue를 사용할 수 있지만, 라벨을 사용하여 특정 반복문을 탈출하는 기능은 지원하지 않는다. 자바에서는 break나 continue를 사용해 가장 가까운 반복문만 제어할 수 있으며, 다중 루프에서 특정 반복문을 탈출하고자 할 때는 추가적인 플래그 변수를 사용하거나 루프 구조를 변경해야 한다. 반면, 코틀린에서는 라벨을 통해 특정 반복문을 직접적으로 탈출하거나 건너뛸 수 있어 코드 작성이 더 직관적이고 간결해진다.
▶라벨을 사용한 반복문 제어의 장점
가독성 향상
중첩된 반복문에서 특정 조건을 만족할 때 원하는 반복문만 탈출하거나 건너뛸 수 있어 코드의 가독성을 높일 수 있다.
유연성
라벨을 사용하면 반복문을 중첩해서 사용할 때 더 유연한 제어가 가능해진다. 여러 중첩된 루프에서도 원하는 지점만 정확히 탈출할 수 있어 코드를 효율적으로 작성할 수 있다.
코드 간결화
다중 루프에서 탈출할 때 플래그 변수나 추가적인 조건문을 사용할 필요가 없어 코드가 간결해지고, 가독성이 좋아진다.
코틀린의 라벨과 break/continue를 활용한 반복문 제어는 코드의 유연성과 가독성을 높여주는 유용한 기능이다. 자바에서는 지원하지 않는 라벨 기능 덕분에 코틀린에서는 다중 루프에서도 쉽게 특정 반복문을 제어할 수 있다. 특히 중첩된 반복문에서 특정 조건을 만족할 때 원하는 반복문을 빠르게 탈출하거나 건너뛸 수 있어, 복잡한 반복문을 다루는 상황에서 효과적이다. 하지만 남용할 경우 코드가 복잡해질 수 있으므로, 필요한 경우에만 적절하게 사용하는 것이 좋다.
'Kotlin' 카테고리의 다른 글
[TIL]20241107 실드클래스(Sealed Class) (1) | 2024.11.07 |
---|---|
[TIL]20241106 제네릭(Generic) (1) | 2024.11.06 |
[TIL]20241104 Named Argument (1) | 2024.11.04 |
[TIL]20241103 Immutable Collection & Mutable Collection (6) | 2024.11.03 |
[TIL]20241102 백틱(`) 활용 (0) | 2024.11.02 |