Kotlin for문 / Kotlin forEach문 

가끔 작업을 하다 보면 이런 경우가 있습니다.

Java 소스 작업 후, Kotlin 작업하면서 갑자기 for문을 사용하려다 멈칫하지 않나요?

(저만 그렇다면.. 제가 사실 기억력이 좋지 않습니다..ㅎㅎ)

 

 

그렇기 때문에 이번에는 Kotlin for문, forEach문을 간단하게 정리 해보려고 합니다.

 

 


 

for + until

for (i in 0 until 10) {
    // return : 0 1 2 3 4 5 6 7 8 9  
}

for (i in 0 until 10 step 2) {
    // return : 0 2 4 6 8
}

간단하게 for문에 until을 활용한 예제 입니다.

until을 활용하실 때 마지막 index 값에 주의하시면 될 것 같습니다

(until 10 은 index 10 전까지 반복)

 

 

for +..

for (i in 0..10) {
    // return 0 1 2 3 4 5 6 7 8 9 10
}

for (i in 0..10 step 2) {
    // return 0 2 4 6 8 10
}

이번에는 until과 다른 게

마지막 index값까지 포함하여 반복합니다.

 

 

for + downTo

for (i in 10 downTo 0) {
    // return 10 9 8 7 6 5 4 3 2 1 0
}

for (i in 10 downTo 0 step 2) {
    // return 10 8 6 4 2 0
}

지금까지 오름차순 반복이었다면

이번에는 downTo를 활용하여 내림차순 반복입니다.

 


두둥!

여기서 갑자기 의문이 듭니다.

오름차순에서는 until를 활용한 반복을.. 을 활용하여 비슷하게 표현이 가능했는데요

for (i in 0..10) {
    // return 0 1 2 3 4 5 6 7 8 9 10
}

for (i in 10..0) {
    // return ???
}

 

과연 결과는 어떻게 나올까요??

 

 

 

 

위와 같이 for(i in 10.. 0)은 저희가 예상하는 

10 9 8 7..... 0과 같은 값이 나오지 않습니다!

 

 

AndroidStudio에서도 10.. 0의 범위는 비어있는 범위이기 때문에

downTo로 변경해줄까? 하고 친절하게 경고해주고 있습니다.

 

 

 


 

for + List

 

이제는 리스트 데이터와 for문을 활용해보겠습니다.

val mutableList: MutableList<String> = mutableListOf("A", "B", "C", "D")

for (data in mutableList){
    // return A B C D
}

 

val mutableList: MutableList<String> = mutableListOf("A", "B", "C", "D")

for (index in 0 until mutableList.size) {
    // return ???
}

 

위와 아래의 코드 차이가 무엇일까요??

아래 코드의 결과는 위와 같을까요??

 

 

차이점 

 - 변수명 data, index (제가 왜 변수 이름을 다르게 했을까요)

 - for문 사용 시 범위 (mutableList사용 vs 0 until list.size)

 

 

for(data in mutableList)에서 data의 값을 확인하면

return A B C D 가 나오게 됩니다.

 

for(index in 0 until mutable.size)에서 index의 값을 확인하면

return 0 1 2 3 이 나옵니다.

 

당연한 결과입니다.

첫 번째는 mutableList 자체를 for문 범위로 지정하여 해당 리스트의 값들을 반환받았고

두 번째는 mutableList.size 즉 리스트의 크기를 활용하여 반복하고 있습니다

 

for(index in 0 until mutable.size)

index return = 0 1 2 3 

여기서 우리가 원하는 A B C D 값을 받으려면 mutableList [index] 이렇게 요청해야 합니다.

 

mutableList[index] return = A B C D

 


forEach

 

위에서 계속 봤던 0~10까지 반복하는 for문을 forEach문으로 간단하게 표현해봤습니다.

(0..10).forEach { data ->
    // return 0 1 2 3 4 5 6 7 8 9 10
}

 

val mutableList: MutableList<String> = mutableListOf("A", "B", "C", "D")
        
mutableList.forEach { data ->
      // return A B C D
}

mutableList.forEachIndexed { index, data ->
      // index return 0 1 2 3
      // data return A B C D
}

 

forEach에 대한 설명은 위의 예제로 충분하게 표현되고 있는 거 같습니다.

 

저는 작업 도중 반복문은 대부분 리스트 형태의 데이터를 처리할 때 사용하고 있어서

for문을 사용하기보다는 forEach문을 사용하고 있습니다.

 

forEach를 활용하는 이유는 위의 내용들을 보시는 것 같이

for문 보다 forEach문을 사용하면 더 간단하게 표현이 가능하기 때문입니다.

 

(간편하고 보기 좋은 게 최고죠!)

 

 

 


여기까지 저의 긴 글을 읽어주셔서 감사합니다.

제가 습관적으로 코딩을 하는 그날까지 습관적으로 코딩을 하기 위해 글 작성을 꾸준하게 하겠습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기