KOTLIN · 테스트
성능 테스트 (Performance Test)
코드의 실행 시간을 측정하고 기준치와 비교합니다. 성능 회귀를 감지하는 간단한 벤치마크 테스트입니다.
테스트고급benchmarkperformance-testmeasureNanoTimeregression
핵심 설명
코드의 실행 시간을 측정하고 기준치와 비교합니다. 성능 회귀를 감지하는 간단한 벤치마크 테스트입니다.
Kotlin code
import kotlin.system.measureNanoTime
import kotlin.system.measureTimeMillis
data class BenchResult(val name: String, val avgNs: Long, val minNs: Long, val maxNs: Long)
fun benchmark(
name: String,
warmup: Int = 100,
iterations: Int = 1000,
block: () -> Unit
): BenchResult {
// 워밍업
repeat(warmup) { block() }
// 측정
val times = LongArray(iterations) { measureNanoTime(block) }
return BenchResult(
name = name,
avgNs = times.average().toLong(),
minNs = times.min(),
maxNs = times.max()
)
}
fun main() {
val list = (1..10000).toList()
val r1 = benchmark("List.filter+map") {
list.filter { it % 2 == 0 }.map { it * 2 }
}
val r2 = benchmark("Sequence.filter+map") {
list.asSequence().filter { it % 2 == 0 }.map { it * 2 }.toList()
}
val r3 = benchmark("forEach 수동") {
val result = mutableListOf<Int>()
for (i in list) { if (i % 2 == 0) result.add(i * 2) }
}
listOf(r1, r2, r3).forEach { r ->
println("${r.name}: avg=${r.avgNs/1000}μs, min=${r.minNs/1000}μs, max=${r.maxNs/1000}μs")
}
// 성능 기준 검증
assert(r1.avgNs < 10_000_000) { "List 처리가 너무 느림: ${r1.avgNs}ns" }
println("
성능 테스트 통과!")
}학습 팁
워밍업(warmup) 단계에서 JIT 컴파일이 완료되도록 합니다. 워밍업 없이 측정하면 초기 실행이 느려 결과가 왜곡됩니다.
주의할 점
마이크로벤치마크는 JVM 최적화에 크게 영향받습니다. 정밀한 벤치마크에는 JMH(Java Microbenchmark Harness)를 사용하세요.
자주 묻는 질문
성능 테스트 (Performance Test)란 무엇인가요?
코드의 실행 시간을 측정하고 기준치와 비교합니다. 성능 회귀를 감지하는 간단한 벤치마크 테스트입니다.
성능 테스트 (Performance Test) 학습 시 주의할 점은 무엇인가요?
마이크로벤치마크는 JVM 최적화에 크게 영향받습니다. 정밀한 벤치마크에는 JMH(Java Microbenchmark Harness)를 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.