F.R.I.D.A.Y.

Kotlin: 12 흐름 제어하기 본문

DEV/Kotlin

Kotlin: 12 흐름 제어하기

F.R.I.D.A.Y. 2020. 4. 4. 23:08
반응형

 책에서는 <04-3 흐름의 중단과 반환> 영역입니다. 책은 람다식(Lambda expression), 인라인 함수(inline function) 등 구성에 대해서는 이미 나왔습니다. 프로그램을 처음 배운다면 람다식이나 인라인 함수 등은 솔직히 어려울 수 있습니다. 그래서 후순위로 미뤄두고 기본적인 문법 사항이 모두 포스트 된 다음에 글을 쓰려고 합니다. 그래서 return 키워드를 이용한 제어는 다른 포스트에서 후술 하겠습니다.


Index

  • 흐름 제어하기
    • break
    • continue
  • 라벨 사용하기
    • 선언
    • 사용
  • Next.

Script from F.R.I.D.A.Y


흐름 제어하기copy^

 이전 시간에 반복문에 대해 알아봤습니다. 이 문단에서는 반복문의 흐름을 제어하는 방법을 알아볼 것입니다.

breakcopy^

 코틀린에서는 break라는 키워드가 존재합니다. 먼저 break란 단어의 의미를 알아보겠습니다.

네이버 사전

 반복문이라는 흐름을 깨버리는 것이 break라고 생각할 수 있습니다. 실제로도 그렇게 이루어지니까요.

 

 

- 1부터 10까지 더하기 -

 

 다시 한번 1부터 10까지 더해보겠습니다.

fun main(args:Array<String>){
    var sum = 0

    for(i in 1..10){
        sum += i
    }

    println(sum)
}

 출력한 결과는 55가 될 것입니다. 그렇다면 이 코드에서 범위를 수정하지 않고 1부터 5까지만 더하도록 해보겠습니다.

if(i <= 5) sum += i

 i의 값이 5 이하일 때만 값을 더하도록 if문 분기를 하면 되겠죠. 그런데 이 경우에는 if문을 열 번 비교하게 됩니다. 범위를 수정하지 않았으니 무조건 루프가 10번 돌 테니까요. 이때 break를 이용할 수 있습니다.

fun main(args:Array<String>){
    var sum = 0

    for(i in 1..10){
        if(i > 5) break
        sum += i
    }

    println(sum)
}

 이렇게 하면 i의 값이 6이 되었을 때 if문 판별이 참이 되어 break 키워드가 수행되고 for 반복문을 탈출하게 됩니다.

continuecopy^

 컨티뉴(continue) 키워드는 break와 달리 반복 구간을 완전히 끝내지 않고 해당 회차를 넘어가는 대신 다음 회차는 그대로 진행하도록 하는 키워드입니다.

 다시, 1부터 10 중에 홀수만 출력하는 프로그램이 있다고 해봅니다.

fun main(args:Array<String>){
    for(i in 1..10){
        if(i % 2 == 1) println(i)
    }
}

 이 코드는 아래처럼 변형할 수 있습니다.

fun main(args:Array<String>){
    for(i in 1..10){
        if(i % 2 == 0) continue
        println(i)
    }
}

continue로 작성한 코드의 결과


라벨 사용하기copy^

 라벨이라는 문법도 있습니다. 이 문법은 break, continue, return 키워드와 함께 사용합니다.

선언copy^

 라벨의 선언은 반복문 for 앞에서 사용할 수 있습니다.

first@ for(i in 1..10){
    second@ for(k in 1..10){
        if(i == k) continue@second
        println("$i * $k = ${i * k}")
    }
}

for 키워드 앞에 선언된 라벨

 라벨은 꼭 라벨명 뒤에 at(@) 기호를 붙여서 써주어야 합니다.

사용copy^

 설명을 위해 작성한 위 코드는 반복문이 여러 겹으로 겹쳐진 다중 반복문입니다. 각 반복문 앞에 first@와 second@ 라벨이 붙어있음을 알 수 있습니다. continue나 break를 이용하면 해당 영역으로 이동할 수 있습니다. 만일 위 코드의 continue@second가 continue@first 로 변경되었다면 i와 k의 값이 같을 경우 다음 i로 넘어갈 것입니다. 즉, 아래와 같이 출력이 되겠지요.

이전(continue@second) 변경(continue@first)
1 * 2 = 2 2 * 1 = 2
1 * 3 = 3 3 * 1 = 3
... 3 * 2 = 6
5 * 4 = 20 4 * 1 = 4
5 * 6 = 30 4 * 2 = 8
5 * 7 = 35 4 * 3 = 12
... ...

 

 간혹, 다중 반복문을 통해 특정 값을 검색하는 경우가 있습니다. 이 경우 특정 값을 찾았다면 이후 검색을 필요가 없겠죠. 그럴 때 break@label을 통해 검색을 위한 다중 반복문 자체를 탈출할 수 있습니다.


Next.copy^

 

Kotlin: 13 예외 처리

우리가 살면서 목돈을 마련하는 이유는 무엇일까요? 미래를 예측할 수 없기 때문에. 즉, 만일의 상황이 발생했을 때 이를 대비하기 위해 목돈을 마련해둡니다. 프로그램에서도 이렇게 목돈과 같은 문법이 존재합..

pang2h.tistory.com

728x90
반응형

'DEV > Kotlin' 카테고리의 다른 글

Kotlin: 14 인라인 함수와 익명 함수  (0) 2020.04.06
Kotlin: 13 예외 처리  (1) 2020.04.05
Kotlin: 11 반복문-while, do-while  (0) 2020.04.03
Kotlin: 10 반복문-for  (0) 2020.04.03
Kotlin: 09 분기 제어-when  (0) 2020.04.02