안녕하세요 VisionARy입니다.
오늘은 코틀린의 반복문에 대해서 알아보도록 하겠습니다.
이해를 돕기 위해 우리에게 익숙한 형태인 C++의 for문과 비교하여 살펴보겠습니다.
# for(i = 0; i <= 9; ++i)
for (i in 0..9) { print(i) } //결과 : 0123456789
- for (i in from..to) : [from, to] 범위에서 i를 iterate합니다.
- 반복문의 iterate에 쓰이는 변수 i는 val 키워드가 필요 없습니다.
- 기본적으로 step이 1인 반복문입니다.
위와 같이 코틀린에서의 반복문은 상당히 간결한 문법으로 작성할 수 있습니다.
여기서 step은 i가 얼마만큼씩 증가하냐를 의미합니다. 아래는 step이 3인 경우의 반복문입니다.
# for(i = 0; i <= 9; i += 3)
for (i in 0..9 step(3)) { print(i) } //결과 : 0369
i가 0부터 3씩 증가하면서 "0369"를 출력하게 됩니다.
# for(i = 9; i >= 0; --i) ???
i가 9부터 0까지 반복하는 경우는 어떻게 작성될까요? 직관적으로 생각하면 0과 9의 위치를 바꾸어 다음과 같이 작성하면 될 것 같은데 말이죠.. 하지만 직접 컴파일 해보면 아무것도 출력되지 않는 것을 알 수 있습니다.
for (i in 9..0) { print(i) } // 결과 :
위의 문법을 우리에게 익숙한 for문으로 바꾸면 for (int i = 9; i < 0; ++i) 이기 때문입니다.
따라서 코틀린에서는 이에 대한 키워드로 downTo 를 제공합니다.
# for(i = 9; i >= 0; --i) !!!
for (i in 9 downTo(0)) { print(i) } // 결과 9876543210
마찬가지로 step을 명시하지 않으면 기본값은 1이기 때문에 step(n)을 통해 step을 지정해 줄 수 있습니다.
# for(auto i : list)
한편, 리스트에 담겨있는 아이템을 순회하기 위해서는 다음과 같이 직관적으로 사용할 수 있습니다.
val list = arrayOf(0,1,2,3,4,5) for (i in list) { print(i) } // 결과 : 012345
위의 경우 반복문 안에 인덱스에 대한 정보가 포함되어 있지 않습니다. 인덱스를 읽기 위해서는 다음과 같은 구문으로도 사용할 수 있습니다.
val list = arrayOf(10,20,30,40,50) for (i in list.indices) { print(i) print(":") print(list[i]) print(" ") } // 결과 : 0:10 1:20 2:30 3:40 4:50
다른 언어와 같이 코틀린에도 For문 이외에 While 반복문이 있습니다. while은 특별히 다른 점이 없습니다.
var i = 0 while (i < 10) { print(i++) } // 결과 : 0123456789
# goto: 또는 if(flag) break; 떡칠
간혹 다중 반복문에서 어떤 조건을 만족하면 더 이상 반복문을 돌지 않고 가장 바깥쪽 For문까지 빠져나와야 하는 경우가 있습니다. 특히 PS를 하면서 삼중포문 이상에서 이러한 경우가 생기면 flag 값을 하나 설정해서 아래와 같이 빠져나오는 경우가 많았습니다.
bool f = false; for (int i = 0; i < 9; ++i) { for (int j = 0; j < 9; ++j) { for (int k = 0; k < 9; ++k) { if (check()) { f = true; break; } } if (f) break; } if (f) break; }
하지만 코틀린에서는 @keyword 를 통해서 for문-break의 짝을 명시하여 이를 깔끔하게 처리를 할 수 있습니다.
loop라는 이름은 예시이며 자유롭게 바꿀 수 있습니다. for앞에 keyword@ / break 뒤에 @keyword로 붙입니다.
loop@for(i in 0..5) { for (j in 0..5) { for (k in 0..5) { if (i == 1 && j == 4) { break@loop } } } }
'Kotlin' 카테고리의 다른 글
[Kotlin] 기초 문법 정리 - 변수와 널(null) (0) | 2020.09.08 |
---|---|
[Kotlin] 기초 문법 정리 - 자료형 (0) | 2020.09.07 |
[Kotlin] 안드로이드 Kotlin First? Kotlin First! (0) | 2020.09.05 |
댓글