(Kotlin) Break, Continue
이전 글에서 흐름제어에 대해 알아보았습니다.
이번에는 흐름제어에서 반복문을 좀 더 유연하게 사용할 수 있게 하는 break와 continue에 대해 알아보겠습니다.
먼저 간단하게 개념에 대해 이야기하겠습니다.
break는 멈춘다는 의미로 가장 가까이에 있는 반복문을 멈추고 밖으로 나가는 명령어입니다.
continue는 계속한다는 의미로 반복문의 한 사이클을 중간에 멈추고 다음 사이클을 실행하라는 명령어입니다.
간단한 예로 시작 하겠습니다.
for (i in 1..3) {
for (j in 1..3) {
println("${i} * ${j} = ${i * j}")
}
}
i가 1부터 3까지 반복하면서
j가 1부터 3까지 반복하면서
${i} * ${j} = ${i * j}를 출력하는 코드입니다.
그러면 중간에 변화를 주겠습니다.
for (i in 1..3) {
for (j in 1..3) {
if (i * j == 6) {
break
}
println("${i} * ${j} = ${i * j}")
}
}
2 * 3 = 6
3 * 2 = 6
3 * 3 = 9
이렇게 3개의 결과가 출력되지 않는 것을 확인 할 수 있습니다.
그 이유는 i * j가 6이 되는 시점에 j가 속해있는 for문을 break로 인해 멈추기 밖으로 나가기 때문입니다.
for (i in 1..3) {
for (j in 1..3) {
if (i * j == 6) {
continue
}
println("${i} * ${j} = ${i * j}")
}
}
이번에는 break와는 다르게
3 * 3 = 9
가 출력이 되었습니다.
그 이유는 continue는 반복문 자체를 멈추는 것이 아니라 현재 반복문의 한 사이클을 멈추고 다음 사이클을 실행하기 때문입니다.
그래서 i * j의 값이 6이 되는 부분만 출력하지 않고 나머지 반복문을 계속 진행하는 것입니다.
다음은 java에는 없고 c를 배울 때 사용 했던 goto문과 비슷한 것에 대해 알아보겠습니다.
바로 break와 continue에 label를 붙이는 것입니다.
loop1@ for (i in 1..3) {
loop2@ for (j in 1..3) {
if (i * j == 6) {
continue@loop1
}
println("${i} * ${j} = ${i * j}")
}
}
for앞에 loop1@라는 라벨이 생겼습니다.
continue뒤에 @loop1라는 라벨이 생겼습니다.
결과값은 break문과 동일합니다.
그 이유는 i가 속해있는 for문에 loop1라는 라벨을 넣어주고 continue에서 loop1 라벨을 붙여주었고 그로 인해 loop1으로 점프한 효과를 볼 수 있기 때문입니다.
loop1@ for (i in 1..3) {
loop2@ for (j in 1..3) {
if (i * j == 6) {
break@loop1
}
println("${i} * ${j} = ${i * j}")
}
}
이제는 continue대신 break에 라벨을 붙여봤습니다.
이제는 i * j가 6일 때 loop1라벨이 붙은 반복문을 break해버립니다.
그래서 결과가 2 * 3 = 6일 때 i가 속해있는 반복문이 멈추게 됩니다.
이렇게 라벨을 사용하게 되면 이중포문 혹은 삼중포문에서 탈출을 한번에 할 수 있는 효과를 볼 수 있습니다.
출처 : https://googry.tistory.com/34?category=749066
'안드로이드 > 코틀린' 카테고리의 다른 글
(Kotlin) 흐름제어 if when for while break continue (0) | 2020.07.13 |
---|---|
(Kotlin) Scanner로 입력받기 (0) | 2020.07.13 |
(Kotlin) 속성 기본 타입 (0) | 2020.07.13 |
(Kotlin) IntelliJ 프로젝트 생성하기 (0) | 2020.07.13 |
(Kotlin) 코틀린이란 (0) | 2020.07.13 |