•
컬렉션 요소를 순회하기 위해 Kotlin 표준 라이브러리는 컬렉션의 기본 구조를 노출하지 않고 요소에 순차적으로 접근할 수 있는 반복자 메커니즘을 지원한다.
•
반복자는 컬렉션의 모든 요소를 하나씩 처리해야 할 때 유용하다.
•
예를 들어 값을 출력하거나 유사한 업데이트 작업을 할 때 사용된다.
Iterators
val numbers = listOf("one", "two", "three", "four")
val numbersIterator = numbers.iterator()
while (numbersIterator.hasNext()) {
println(numbersIterator.next())
// 출력 결과:
// one
// two
// three
// four
}
Kotlin
복사
•
반복자는 Iterable<T> 인터페이스를 상속하는 클래스들(Set, List 등)에서 iterator() 함수를 호출하여 얻을 수 있다.
•
한 번 반복자를 얻으면 반복자는 컬렉션의 첫 번째 요소를 가리킨다.
•
next() 함수를 호출하면 이 요소가 반환되며 반복자의 위치는 다음 요소로 이동한다.
•
마지막 요소를 통과한 후에는 더 이상 요소를 가져올 수 없으며 반복자를 이전 위치로 재설정할 수 없다.
•
컬렉션을 다시 순회하려면 새로운 반복자를 생성해야 한다.
for 루프를 통한 순회
val numbers = listOf("one", "two", "three", "four")
for (item in numbers) {
println(item)
// 출력 결과:
// one
// two
// three
// four
}
Kotlin
복사
•
또 다른 방법으로는 잘 알려진 for 루프를 사용하여 Iterable 컬렉션을 순회하는 것이다.
•
for 을 사용할 때 반복자는 암시적으로 제공된다.
forEach() 함수
val numbers = listOf("one", "two", "three", "four")
numbers.forEach {
println(it)
// 출력 결과:
// one
// two
// three
// four
}
Kotlin
복사
•
마지막으로 forEach() 함수는 컬렉션을 자동으로 순회하면서 각 요소에 대해 주어진 코드를 실행할 수 있게 해준다.
List Iterators
val numbers = listOf("one", "two", "three", "four")
val listIterator = numbers.listIterator()
while (listIterator.hasNext()) listIterator.next()
println("뒤로 순회:")
// 뒤로 순회:
while (listIterator.hasPrevious()) {
print("인덱스: ${listIterator.previousIndex()}")
println(", 값: ${listIterator.previous()}")
// 출력 결과:
// 인덱스: 3, 값: four
// 인덱스: 2, 값: three
// 인덱스: 1, 값: two
// 인덱스: 0, 값: one
}
Kotlin
복사
•
List 에 대해서는 특별한 반복자 구현인 ListIterator가 있다.
•
이 반복자는 List 를 양방향으로 순회하는 기능을 지원한다. (앞으로 이동하거나 뒤로 이동)
•
뒤로 가는 순회는 hasPrevious() 와 previous() 함수로 구현된다.
•
ListIterator는 nextIndex() 와 previousIndex() 함수로 요소 인덱스에 대한 정보를 제공한다.
•
양방향 순회가 가능하므로 ListIterator 는 마지막 요소에 도달한 후에도 사용할 수 있다.
Mutable Iterators
val numbers = mutableListOf("one", "two", "three", "four")
val mutableIterator = numbers.iterator()
mutableIterator.next()
mutableIterator.remove()
println("제거 후: $numbers")
// 출력 결과: [two, three, four]
Kotlin
복사
•
변경 가능한 컬렉션을 순회하기 위해서는 Iterator 를 상속한 MutableIterator 가 있다.
•
이 반복자는 요소를 제거할 수 있는 remove() 함수를 제공한다.
•
따라서 순회 중에 컬렉션에서 요소를 제거할 수 있다.
val numbers = mutableListOf("one", "four", "four")
val mutableListIterator = numbers.listIterator()
mutableListIterator.next()
mutableListIterator.add("two")
println(numbers)
// 출력 결과: [one, two, four, four]
mutableListIterator.next()
mutableListIterator.set("three")
println(numbers)
// 출력 결과: [one, two, three, four]
Kotlin
복사
•
요소를 제거하는 것 외에도 MutableListIterator 는 add() 및 set() 함수를 사용하여 순회 중에 List 에 요소를 삽입하거나 교체할 수 있다.