for

  • 자바가 인덱스 기반 for문과 for-each 문을 지원하는 반면 코틀린은 for-each 형태만 지원하며, 반자를 통해 접근하는 인자의 타입을 생략할 수 있다.

//java
List<String> names = ... // 이름목록

//for-each
for(String name : names) {
    Log.d("Name:", "name = " + name);
}
//kotlin
val names: List<String> = ...

//변수 name의 타입은 리스트 names를 통해 String으로 추론하므로
//타입을 굳이 명시하지 않아도 된다.
for(name in names) {
    Log.d("Name", "name=" + name)
}

for 문 에서의 인덱스 접근

  • for문 내에서 현재 항목의 인덱스가 필요할 경우, Collection.indicies 프로퍼티를 사용하면 컬렉션의 인덱스를 순환하며 인덱스 인자로 배열 내 항목에 접근할 수 있다.

//kotlin
val names: List<String> = ...

for(i in names.indicies) {
    //인덱스 인자로 배열 내 항목 접근
    Log.e("Name", "name=${names[i]}")
}

범위

  • 코틀린에서는 순환 범위를 표현하기 위해 별도의 자료구조를 사용한다.

  • 범위(range)는 코틀린에만 있는 독특한 자료구조로, 특정 범위를 순환하거나 해당 범위내에 특정 항목이 포함되어 있는지 확인할 때 사용한다.

  • range는 .. 연산자를 사용하여 정의한다.

//kotlin
//0부터 10까지, 시작과 끝을 포함하는 범위를 정의한다.
val myRange : IntRange = 0..10 //IntRange클래스를 사용하여 배열 인덱스의 순환 범위를 표현한다.

//위에서 정의한 범위를 순환하는 for문
for(i in myRange) {
    //Do something
}

//for문 안에서 바로 범위를 지정할수도 있다.
for(i in 0..10) {
    //Do something
}

인덱스 순환을 위한 범위를 생성하는 경우 .. 연산자 대신에 until 함수를 사용하면 가장 마지막 값을 포함하지 않는 범위를 생성할 수 있다.

val items: List<String> = ...

//0번 인덱스부터 3번 인덱스까지 총 4개 항목을 포함하는 범위
val myRange: IntRange = 0..3

//myRange와 동일한 항목을 포함하는 범위 (미)
val myRange2: IntRange = 0 until 4

범위내에 특정 항목이 있는지 알아보려면 in 연산자를 사용한다.

val myRange: IntRange = 0..10

//5가 myRange에 포함되어 있는지 검사: true반환
val foo: Boolean = 5 in myRange

//5가 myRange안에 포함되지 않는지 검사: false반환
val bar: Boolean = 5 !in myRange

downTo() : 역순으로 수행한다.

for (i in 4 downTo 1) print(i) // prints "4321"

step() : interval 설정이 가능하다.

for (i in 1..4 step 2) print(i) // prints "13"

for (i in 4 downTo 1 step 2) print(i) // prints "42"

Last updated