본문 바로가기
Kotlin

[Kotlin] 기초 문법 정리 - 반복문을 알아보자

by Saerong2 2020. 9. 17.

안녕하세요 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
                }
            }
        }
}

 

댓글