Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20241105 Label & break/continue 본문

Kotlin

[TIL]20241105 Label & break/continue

최밤빵 2024. 11. 5. 21:49

코틀린을 공부하며 반복문을 제어하는 새로운 방식인 라벨(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는 중첩된 반복문에서 유용하지만, 남용할 경우 코드가 복잡해져 가독성을 해칠 수 있다. 따라서 코드의 흐름을 이해하기 어려운 경우에는 라벨을 사용하기보다 반복문을 더 단순화하거나 함수를 분리하는 것이 좋다. 필요할 때만 라벨을 사용해 코드를 명확하게 유지하는 것이 중요하다.


▶자바와 코틀린의 차이점

자바에서도 breakcontinue를 사용할 수 있지만, 라벨을 사용하여 특정 반복문을 탈출하는 기능은 지원하지 않는다. 자바에서는 break나 continue를 사용해 가장 가까운 반복문만 제어할 수 있으며, 다중 루프에서 특정 반복문을 탈출하고자 할 때는 추가적인 플래그 변수를 사용하거나 루프 구조를 변경해야 한다. 반면, 코틀린에서는 라벨을 통해 특정 반복문을 직접적으로 탈출하거나 건너뛸 수 있어 코드 작성이 더 직관적이고 간결해진다.


▶라벨을 사용한 반복문 제어의 장점

가독성 향상

중첩된 반복문에서 특정 조건을 만족할 때 원하는 반복문만 탈출하거나 건너뛸 수 있어 코드의 가독성을 높일 수 있다.

유연성

라벨을 사용하면 반복문을 중첩해서 사용할 때 더 유연한 제어가 가능해진다. 여러 중첩된 루프에서도 원하는 지점만 정확히 탈출할 수 있어 코드를 효율적으로 작성할 수 있다.

코드 간결화 

다중 루프에서 탈출할 때 플래그 변수나 추가적인 조건문을 사용할 필요가 없어 코드가 간결해지고, 가독성이 좋아진다.


코틀린의 라벨과 break/continue를 활용한 반복문 제어는 코드의 유연성과 가독성을 높여주는 유용한 기능이다. 자바에서는 지원하지 않는 라벨 기능 덕분에 코틀린에서는 다중 루프에서도 쉽게 특정 반복문을 제어할 수 있다. 특히 중첩된 반복문에서 특정 조건을 만족할 때 원하는 반복문을 빠르게 탈출하거나 건너뛸 수 있어, 복잡한 반복문을 다루는 상황에서 효과적이다. 하지만 남용할 경우 코드가 복잡해질 수 있으므로, 필요한 경우에만 적절하게 사용하는 것이 좋다.