개발이 취미인 사람

[Kotlin] break & continue와 forEach 사용법 본문

언어(Programming Language)/Kotlin

[Kotlin] break & continue와 forEach 사용법

RyanSin 2021. 2. 14. 19:31
반응형

- 지난 시간

안녕하세요. 지난 시간에는 조건문 while & for 기본 사용법에 대해 알아봤습니다.

 

혹시 놓치고 오신 분들은 아래 링크를 통해 학습하고 오시는 걸 추천드리겠습니다.

any-ting.tistory.com/57

 

[Kotlin] while & for 기본 사용법

- 지난 시간 안녕하세요. 지난 시간에는 조건문에 대해 알아봤습니다. 혹시 놓치고 오신 분들은 아래 링크를 통해 학습하고 오시는 걸 추천드리겠습니다. any-ting.tistory.com/56 [Kotlin] 조건문 If & When

any-ting.tistory.com

- 개요

이번 시간에는 반복문에 사용되는 break & continue와 forEach에 대해 알아보겠습니다.

 

Break & Continue

다른 언어랑 마찬가지로 break과 continue에 사용 방식은 동일합니다.

 

break : 반복문 안의 구문이 실행되는 중, break 구문을 만나면 반복문을 빠져나갑니다.

continue : 반복문 안의 구문이 실행되는 중, continue 구문을 만나면 해당 반복문으로 다시 돌아갑니다.

 

 fun mian(){
 
    for (index in 0..10){

        if(index == 3) break
        println(index)
    }

    /**
     * 실행 결과
     *
     * 0
     * 1
     * 2
     */

}

if 조건을 만나 반복문을 빠져나오는 걸 알 수 있습니다.

 

fun main(){

    for (index in 0..5){

        if(index == 3) continue
        println(index)
    }

    /**
     * 실행 결과
     *
     * 0
     * 1
     * 2
     * 4
     * 5
     */
     
}

if 조건을 만나 다시 반복문으로 되돌아가 다음 반복문을 수행하는 걸 알 수 있습니다.

 

for label

코틀린에서는 label이라는 기술을 지원합니다. 우리는 다중 반복문을 사용하게 되면 내부 반복문에도 brack를 선언하고 외부 반복문에도 break를 선언했던 걸 기억하시죠.

 

자바에서 이렇게 사용했어요.

for (int i = 0; i< 10; i++){
     System.out.println("i 반복문");

     for (int j = 0; j< 10; j++){
         System.out.println("j 반복문");

         for (int k = 0; k< 10; k++){
             System.out.println("k 반복문");

             if(k == 3) {
                System.out.println("k == 3");
                break;
             }
         }
         break;
     }
     break;
}

/**
* 실행 결과
* 
* i 반복문
* j 반복문
* k 반복문
* k 반복문
* k 반복문
* k 반복문
* k == 3
*/

 

하지만 코틀린에서는 label을 사용면 위와 같은 코드를 간결하게 만들 수 있습니다.

 

fun main(){

  kBreak@for(i in 0..3){
            println("i 반복문")

         for (j in 0..3){
             println("j 반복문")

              for (k in 0..3){
                  println("k 반복문")

                  if(k == 3){
                      println("조건문 과실행 $k")
                      break@kBreak
                  }
              }
         }
     }
}

/**
* 실행 결과
* 
* i 반복문
* j 반복문
* k 반복문
* k 반복문
* k 반복문
* k 반복문
* 조건문 과실행 3
*/

break 해야 할 부분에 @label과 빠져나가야 하는 for 문과 연결해주면 됩니다.

 

fun main() {

  for (i in 0..3){
        println("i 반복문")

       kBreak@for (j in 0..3){
              println("j 반복문")

              for (k in 0..3){
                  println("k 반복문")

                  if(k == 3){
                      println("조건문 과실행 $k")
                      break@kBreak
                  }
              }
       }
  }

/**
* 실행 결과
* 
* i 반복문
* j 반복문
* k 반복문
* k 반복문
* k 반복문
* k 반복문
* 조건문 과실행 3
* i 반복문
* j 반복문
* k 반복문
* k 반복문
* k 반복문
* k 반복문
* 조건문 과실행 3
* i 반복문
* j 반복문
* k 반복문
* k 반복문
* k 반복문
* k 반복문
* 조건문 과실행 3
* i 반복문
* j 반복문
* k 반복문
* k 반복문
* k 반복문
* k 반복문
* 조건문 과실행 3
*/

}

label을 다른 곳에 설정해서 결과가 다른 것을 확인할 수 있습니다.

 

j 반복문을 빠져나가도 i 반복문을 만나서 결과가 위와 같이 나오는 겁니다. :)

 

ForEach

forEach는 다른언어와 동일합니다. 하지만 여기서도 label을 사용할 수 있습니다.

 

기본 사용법

fun main(){

    val arrayList = ArrayList<String>()

    arrayList.add("개발이 취미인 사람")
    arrayList.add("코틀린")
    arrayList.add("안드로이드 개발")

    arrayList.forEach {
        println(it)
    }

    /**
     * 실행 결과
     * 개발이 취미인 사람
     * 코틀린
     * 안드로이드 개발 
     */

}

 

암시적 label선언

fun main(){

    val arrayList = ArrayList<String>()

    arrayList.add("개발이 취미인 사람")
    arrayList.add("코틀린")
    arrayList.add("안드로이드 개발")

    arrayList.forEach {
        if(it == "코틀린") return@forEach
        println(it)
    }

    /**
     * 실행 결과
     * 개발이 취미인 사람
     * 안드로이드 개발
     */
     
}

명시적 label 선언

fun main() {

    val arrayList = ArrayList<String>()

    arrayList.add("개발이 취미인 사람")
    arrayList.add("코틀린")
    arrayList.add("안드로이드 개발")

    arrayList.forEach Break@{
       if(it == "코틀린") return@Break
         println(it)
    }

    /**
     * 실행 결과
     * 개발이 취미인 사람
     * 안드로이드 개발
     */
}

하나의 forEach문에서는 암시적인 방법으로 간단하게 구현이 가능하지만 중첩 forEach는 명시적 label 방식을 사용합니다.

 

이번 시간에는 반복문에 사용되는 break & continue와 forEach에 대해 알아보겠습니다. 감사합니다. :)