[kotlin] 반복자 디자인 패턴과 코틀린
코틀린은 자바에서 사용되는 반복자 디자인 패턴을 간편하게 구현할 수 있는 다양한 기능을 제공합니다. 반복자 디자인 패턴은 컬렉션의 요소를 순회하거나 검색할 때 유용하게 사용됩니다. 코틀린에서는 이를 위해 다양한 방식을 제공합니다.
Iterator 인터페이스
코틀린은 Iterator
인터페이스를 제공하여 컬렉션을 순회할 때 사용할 수 있는 표준 인터페이스를 정의하고 있습니다. 이를 활용하여 직접 반복자 디자인 패턴을 구현할 수 있습니다.
class CustomIterator(private val data: List<Int>) : Iterator<Int> {
private var index = 0
override fun hasNext(): Boolean {
return index < data.size
}
override fun next(): Int {
return data[index++]
}
}
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val iterator = CustomIterator(numbers)
while (iterator.hasNext()) {
println(iterator.next())
}
}
확장 함수와 iterator
함수
코틀린에서는 확장 함수를 활용하여 기존의 컬렉션에도 반복자 기능을 추가할 수 있습니다. 이를 위해 iterator
함수를 사용할 수 있습니다. 이를 통해 사용자 정의 데이터 구조에 대한 반복기능을 구현할 수 있습니다.
class CustomIterable(private val data: List<Int>) {
operator fun iterator(): Iterator<Int> {
return data.iterator()
}
}
fun main() {
val numbers = CustomIterable(listOf(1, 2, 3, 4, 5))
for (number in numbers) {
println(number)
}
}
시퀀스(Sequence)와 레이지 연산
코틀린에서는 시퀀스를 활용하여 레이지한 방식으로 연산을 수행할 수 있습니다. 시퀀스를 이용하면 중간 연산과 최종 연산 사이에 중간 결과를 저장하거나 재계산하지 않고도 원소를 처리할 수 있습니다.
fun main() {
val numbers = sequenceOf(1, 2, 3, 4, 5)
val result = numbers
.filter { it % 2 == 0 }
.map { it * it }
.toList()
println(result) // 출력: [4, 16]
}
결론
코틀린은 다양한 방식으로 반복자 디자인 패턴을 활용할 수 있는 기능을 제공합니다. 이러한 기능을 적절히 활용하여 데이터를 효율적으로 처리하고 관리할 수 있습니다.
참고문헌:
- Kotlin Documentation, “Iterators, Sequences, and Collections”
- Baeldung, “Kotlin Iterator: Getting Started”