루프의 시작이나 끝 부분이 아닌 중간에서 종료 조건을 검사하면 편리할 수 있다.
이런 경우를 위해 코틀린은 몇 가지 식을 제공한다.
break
는 즉시 루프를 종료시키고, 실행 흐름이 루프 바로 다음 문으로 이동하게 만든다.continue
는 현재 루프 이터레이션을 마치고 조건 검사로 바로 진행하게 만든다.
말로만 들으면 서로의 의미가 무엇인지 아마 헷갈릴 수 있다.
fun main() {
val a=IntArray(10) {it}
var sum=0
for(x in 0..10){
if(x==5){
break;
}
print(x); //0,1,2,3,4
}
}
위 경우에는 x가 5가되는 순간 break를 만나서 for문이 강제로 종료된다.
fun main() {
val a=IntArray(10) {it}
var sum=0
for(x in 0..10){
if(x==5){
continue
}
print(x); //0,1,2,3,4,6,7,8,9
}
}
위 경우에는 x가 0,1,2,3,4까지는 잘 실행되고 5가 되는 순간 continue를 만나서 종료가 아닌 다시 조건을 검사하는 위치로 가서 6부터 다시 루프를 반복한다.
break와 continue 식은 가장 안쪽에 내포된 루프
에만 적용된다.
경우에 따라 더 밖에 있는 루프의 제어 흐름을 변경하고 싶을 때, 이를 위해 코틀린은 레이블 기능을 제공한다.
fun main() {
val a=IntArray(10) {it}
var sum=0
aloop@ for(x in a.indices){
for(y in 0..10 step 2){
if(a[x]==y) {
continue@aloop
}
println("${a[x]} $y")
}
}
}
바깥쪽 루프에 레이블(aloop)를 붙이고, 만약 안쪽 루프에서 해당 조건이 실행되면 바깥쪽 루프에 이터레이션을 끝내고 다음 이터레이션을 시작한다.
코틀린에서는 break와 continue에는 구체적으로 루프 앞에 붙은 레이블만 사용할 수 있다. 그렇지 않으면 컴파일러 오류를 보고한다!!
레이블 이름은 배열이나 함수와 마찬가지로 임의의 식별자가 될 수 있다.
✔정리
- continue와 break는 내가 원래 사용하던 언어인 C++과 똑같았다.
- 하지만 레이블을 이용한 continue와 break는 편리한 기능인 것 같다.
- 내가 원하는 위치에 루프 문부터 이터레이션을 시작할 수 있기에 효율적인 코드를 작성할 수 있다.
'Skils > Kotlin' 카테고리의 다른 글
[Kotlin] 클래스, 생성자 (0) | 2022.08.29 |
---|---|
[Kotlin] 예외 처리 (0) | 2022.08.27 |
[Kotlin] 반복문 while, do-while, for (0) | 2022.08.17 |
[Kotiln] 조건문 when (0) | 2022.08.17 |
[Kotlin] 조건문 if & 범위,진행,연산 (0) | 2022.08.17 |