PHpullh
학습 라이브러리/Kotlin/커스텀 이터레이터 (Custom Iterator)

KOTLIN · 컬렉션

커스텀 이터레이터 (Custom Iterator)

Iterator 인터페이스를 구현하여 커스텀 순회 로직을 작성합니다. operator fun iterator()로 for-in 루프를 지원합니다.

컬렉션고급iteratoriterablecustom-iterationfor-in

핵심 설명

Iterator 인터페이스를 구현하여 커스텀 순회 로직을 작성합니다. operator fun iterator()로 for-in 루프를 지원합니다.

Kotlin code

class DateRange(
    private val start: java.time.LocalDate,
    private val end: java.time.LocalDate
) : Iterable<java.time.LocalDate> {

    override fun iterator() = object : Iterator<java.time.LocalDate> {
        var current = start
        override fun hasNext() = !current.isAfter(end)
        override fun next(): java.time.LocalDate {
            val result = current
            current = current.plusDays(1)
            return result
        }
    }
}

class FibonacciSequence(private val limit: Int) : Iterable<Long> {
    override fun iterator() = object : Iterator<Long> {
        var a = 0L; var b = 1L; var count = 0
        override fun hasNext() = count < limit
        override fun next(): Long {
            count++
            val result = a
            val next = a + b; a = b; b = next
            return result
        }
    }
}

fun main() {
    val start = java.time.LocalDate.of(2024, 1, 1)
    val end = java.time.LocalDate.of(2024, 1, 5)
    for (date in DateRange(start, end)) print("$date ")
    println()

    FibonacciSequence(8).forEach { print("$it ") }
}

학습 팁

Iterable을 구현하면 for 루프, map, filter 등 모든 컬렉션 함수를 사용할 수 있습니다.

주의할 점

next()에서 hasNext()를 확인하지 않고 호출하면 NoSuchElementException이 발생합니다. 항상 사전 검사를 하세요.

자주 묻는 질문

커스텀 이터레이터 (Custom Iterator)란 무엇인가요?

Iterator 인터페이스를 구현하여 커스텀 순회 로직을 작성합니다. operator fun iterator() 로 for-in 루프를 지원합니다.

커스텀 이터레이터 (Custom Iterator) 학습 시 주의할 점은 무엇인가요?

next() 에서 hasNext() 를 확인하지 않고 호출하면 NoSuchElementException 이 발생합니다. 항상 사전 검사를 하세요.