본문 바로가기
Kotlin

[깡샘의 코틀린 프로그래밍] 정리 6 - for 반복문

by 들풀민들레 2018. 3. 2.

 

본 글은 [깡샘의 코틀린 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.

좀더 자세한 내용은 책을 통해 확인해 주세요.

 

 

 

 

 

 

6장. 흐름제어 구문과 연산자

 

6.2.1. for 반복문

 

for 문은 for 안에 변수를 선언하고 그 변숫값을 증감하면서 특정 조건에 맞을 때까지 구문을 반복 실행하는 것입니다. 하지만 일반 프로그래밍 언어에서 제공하는 for 문의 작성 방법과 코틀린의 작성 방법에는 약간의 차이가 있습니다.

 

01 package six_two_one

02

03 fun main(args: Array<String>) {

04   var sum: Int = 0

05   for(i in 1..10) {

06     sum += i

07   }

08   println(sum)

09 }

 

【 실행결과 】

55

 

위의 소스에서 05번 줄을 보면 for의 반복 조건에 in을 이용했습니다. in 뒤에 1..10이라고 작성했는데, 이는 1부터 10까지를 의미합니다. 이처럼 몇부터 몇까지 특정 범위를 표현할 때 숫자 사이에 점 두 개 (..)를 이용합니다. 위의 05번 줄을 해석하면 다음과 같습니다.

 

"1부터 10까지 숫자를 1씩 증가하면서 변수 i 에 대입하고 for의 { } 부분을 10번 반복하라"

 

컬렉션 타입 이용

 

만약 특정 컬렉션 타입(배열 같은)의 데이터 개수만큼 for 문을 반복해야 한다면 다음처럼 작성할 수 있습니다.

 

01 val list = listOf("Hello", "World", "!")

02 val sb=StringBuffer()

03 for(str in list) {

04   sb.append(str)

05 }

06 println(sb)

 

【 실행결과 】

HelloWorld!

 

03번 줄에서 반복 조건에 in을 사용했는데, in 뒤에 컬렉션 타입의 객체를 지정했습니다. 이렇게 하면 컬렉션 타입의 객체에 포함된 데이터 개수만큼 for 문을 반복하며, 한 번 반복할 때마다 컬렉션 타입의 객체에 담긴 데이터를 순서대로 하나씩 추출하여 in 앞의 변수에 대입합니다.

 

컬렉션 타입의 인덱스값 이용

 

그런데 for 문을 이용하다 보면 인덱스값(컬렉션 타입에서 데이터의 위치를 나타내는 값)을 이용할 때도 있습니다. 예를 들어 for 문을 수행하면서 list 객체의 실제 데이터인 "Hello", "World" 등 값이 아니라, 0, 1 등 데이터 위치를 나타내는 인덱스값을 이용하고 싶습니다. 이럴 때는 indices 프로퍼티를 사용합니다.

 

01 val list = listOf("Hello", "World", "!")

02 for (i in list.indices) {

03   println(list[i])

04 }

 

【 실행결과 】

Hello

World

!

 

indices는 Collection, Array 클래스에 선언되어 있는 프로퍼티로 컬렉션 타입의 인덱스 범위를 반환합니다. 예를 들어 list 객체에 데이터가 3개 들어있다면, list.indices는 0..2를 반환합니다 결국 for (i in list.indices)는 for (i in 0..2)로 선언한 것과 같습니다.

 

컬렉션 타입의 인덱스와 값 모두 이용

 

컬렉션 타입을 이용해 for 문을 작성할 때 인덱스값은 indices를 이용하면 되는데, 어떤 경우에는 인덱스값과 컬렉션 타입의 객체에 저장된 데이터를 함께 얻고 싶을 때가 있습니다. 이때는 withIndex( ) 함수를 이용하여 인덱스($index)와 값($value)을 얻어올 수 있습니다.

 

01 val list = listOf("Hello", "World", "!")

02 for ((index, value) in list.withIndex()) {

03   println("the element at $index is $value")

04 }

 

【 실행결과 】

the element at 0 is Hello

the element at 1 is World

the element at 2 is !

 

또한, for 문의 조건을 줄 때 다음처럼 다양하게 명시할 수도 있습니다.

 

  • for(i in 1..100) { … } → 100까지 포함
  • for(i in 1 until 100) { … } → 100은 포함하지 않음
  • for(x in 2..10 step 2) { … } → 2씩 증가
  • for(x in 10 downTo 1) { … } → 숫자 감소

 

다음 소스는 until과 step을 함께 이용하여 1부터 11 미만까지 2씩 증가하는 조건을 명시한 예입니다

 

01 for(i in 1 until 11 step 2){

02   println(i)

03 }

 

【 실행결과 】

1

3

5

7

9