PHpullh
학습 라이브러리/Kotlin/시퀀스 vs 리스트 성능

KOTLIN · 성능

시퀀스 vs 리스트 성능

시퀀스(지연 평가)와 리스트(즉시 평가)의 성능 차이를 이해합니다. 데이터 크기와 연산 체인에 따른 선택 기준입니다.

성능중급sequencelistlazy-evaluationintermediate-collection

핵심 설명

시퀀스(지연 평가)와 리스트(즉시 평가)의 성능 차이를 이해합니다. 데이터 크기와 연산 체인에 따른 선택 기준입니다.

Kotlin code

import kotlin.system.measureTimeMillis

fun main() {
    val data = (1..5_000_000).toList()

    // 리스트: 매 연산마다 중간 컬렉션 생성
    val listTime = measureTimeMillis {
        data.filter { it % 2 == 0 }
            .map { it.toLong() * it }
            .take(100)
            .sum()
    }

    // 시퀀스: 원소별 처리, 중간 컬렉션 없음
    val seqTime = measureTimeMillis {
        data.asSequence()
            .filter { it % 2 == 0 }
            .map { it.toLong() * it }
            .take(100)
            .sum()
    }

    println("리스트: ${listTime}ms")
    println("시퀀스: ${seqTime}ms")
    println("시퀀스가 ${"%.1f".format(listTime.toDouble() / seqTime)}배 빠름")

    // 작은 컬렉션에서는 리스트가 빠를 수 있음
    val small = (1..100).toList()
    val smallList = measureTimeMillis {
        repeat(100000) { small.filter { it > 50 }.map { it * 2 } }
    }
    val smallSeq = measureTimeMillis {
        repeat(100000) { small.asSequence().filter { it > 50 }.map { it * 2 }.toList() }
    }
    println("
소규모 - 리스트: ${smallList}ms, 시퀀스: ${smallSeq}ms")
}

학습 팁

일반 규칙: 원소 수 10,000개 이상이거나 take로 일부만 필요한 경우 시퀀스가 유리합니다.

주의할 점

시퀀스를 sorted()와 함께 사용하면 전체 원소를 수집해야 하므로 지연 평가의 이점이 사라집니다.

자주 묻는 질문

시퀀스 vs 리스트 성능란 무엇인가요?

시퀀스(지연 평가)와 리스트(즉시 평가)의 성능 차이를 이해합니다. 데이터 크기와 연산 체인에 따른 선택 기준입니다.

시퀀스 vs 리스트 성능 학습 시 주의할 점은 무엇인가요?

시퀀스를 sorted() 와 함께 사용하면 전체 원소를 수집해야 하므로 지연 평가의 이점이 사라집니다.