Iterators

컬렉션 요소를 순회하기 위해 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
복사
요소를 제거하는 것 외에도 MutableListIteratoradd()set() 함수를 사용하여 순회 중에 List 에 요소를 삽입하거나 교체할 수 있다.