티스토리 뷰

Kotlin

코틀린 반복문 2편 Kotlin Iterators

IT Knowledge Share 2021. 7. 6. 19:14
반응형

다음에 주어진 변수를 기반으로 추가적인 반복문을 알아보도록 합니다.

val a = mutableListOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9)

 

1. size를 사용해서 인덱스만 순회하도록 반복하기

 

for문을 사용하는 경우에서 인덱스만을 순회할 수 있도록 코딩하는 방법입니다.

 

다음의 예제를 봅니다.

for (i in 0 until a.size){
        println(a.get(i))
}
반응형

위의 예제는 0부터 변수 a의 크기만큼 인덱스 i를 순회하는 경우입니다.

여기서 중요한 부분은 until을 사용할 경우, a.size의 크기에서 마지막 숫자는 포함되지 않습니다.

 

출력값

1
2
3
4
5
6
7
8
9

출력값에서 알 수 있듯이, 0~8번째 인덱스에 해당하는 값만을 출력했습니다.

 

for문 사용 시 step을 넣어서 원하는 숫자 만큼 건너 뛰게 할 수 있습니다.

 

다음의 경우를 살펴 봅니다.

for (i in 0 until a.size step (2)){
        println(a.get(i))
}

출력값

1
3
5
7
9

step이 (2)로 설정되어 있어서 2씩 건너 뛰어 출력된 결과입니다.

 

 

2. 인덱스 순서가 거꾸로 가는 반복문

 

마지막 인덱스부터 처음 인덱스 번호까지 인덱스 순서가 거꾸로 가도록 출력이 가능합니다.

 

두 예문을 살펴 봅니다.

for (i in a.size-1 downTo (0)){
        println(a.get(i))
}
for (i in a.size-1 downTo (0) step(2)){
        println(a.get(i))
}

출력값

9
8
7
6
5
4
3
2
1
9
7
5
3
1

예문을 살펴보면, 먼저 a.size에 -1을 해준 이유는 Boundary를 벗어나지 않도록 하기 위함입니다.

그리고 downTo를 사용하여 원하는 숫자까지 내려갈 수 있도록 지정합니다.

두 번째 예문과 결과에서 보듯이 step 설정 또한 가능합니다.

 

3. A .. B

 

for문을 사용할 때, A .. B로 범위를 설정하면, until과 다르게 마지막 숫자가 포함됩니다.

 

아래 예문으로 이해해 봅시다.

for (i in 0..10){
        println(i)
}

for (i in 0 until 10){
        println(i)
}

출력값

0
1
2
3
4
5
6
7
8
9
10

0
1
2
3
4
5
6
7
8
9

예문에서 0 .. 10과 0 until 10의 차이점은 출력값에서 나타납니다. 전자는 10을 포함하지만, 후자는 10이 출력되지 않습니다.

 

 

4. while문

 

while문을 사용해서 개체를 반복할 수 있습니다.

이 경우, while문의 조건이 참인 경우, 내용이 계속 반복되며 반복을 멈추려면 조건이 성립하지 않도록 내용을 따로 코딩해야 합니다.

 

얘문을 살펴 봅니다.

var b: Int = 0
var c: Int = 4

while (b < c) {
   b++ //while문을 정지시키기 위한 코드
   println("b")
}

출력값

b
b
b
b

예문을 보시면, b < c 조건은 항상 참입니다. 따라서 b++ 코드가 없다면 b가 계속 출력되는 무한 루프에 걸리게 됩니다. 

 

 

5. do ~ while문

 

do ~ while의 경우, do에 있는 내용을 무조건 한 번은 실행하고 이후에 while 반복절로 넘어가는 형태입니다.

 

예제를 살펴 봅니다.

var d: Int = 0
var e: Int = 4

do {
  println("hello")
  d++
} while (d < e)

출력값

hello
hello
hello
hello

이 경우, do 절에 있는 "hello"가 한 번은 무조건 출력되며, 이후 while의 조건이 참인 경우 do의 내용이 계속 실행되는데, 이 또한 무한 루프를 막기 위해 d++를 코딩한 경우입니다.

반응형
댓글