KOTLIN · 컬렉션
커스텀 컬렉션 확장
확장 함수로 도메인 특화 컬렉션 연산을 추가합니다. 재사용 가능한 유틸리티를 구성합니다.
컬렉션고급extension-functioncollection-utilsstatisticspagination
핵심 설명
확장 함수로 도메인 특화 컬렉션 연산을 추가합니다. 재사용 가능한 유틸리티를 구성합니다.
Kotlin code
// 통계 확장
fun List<Double>.standardDeviation(): Double {
val mean = average()
val variance = map { (it - mean) * (it - mean) }.average()
return kotlin.math.sqrt(variance)
}
fun <T> List<T>.mostFrequent(): T? =
groupingBy { it }.eachCount().maxByOrNull { it.value }?.key
fun <T> List<T>.distinctBy2(selector1: (T) -> Any?, selector2: (T) -> Any?): List<T> {
val seen = mutableSetOf<Pair<Any?, Any?>>()
return filter { seen.add(selector1(it) to selector2(it)) }
}
// 페이지네이션 확장
fun <T> List<T>.page(pageNum: Int, pageSize: Int): List<T> {
val start = (pageNum - 1) * pageSize
return if (start >= size) emptyList()
else subList(start, minOf(start + pageSize, size))
}
fun main() {
val scores = listOf(85.0, 92.0, 78.0, 95.0, 88.0, 72.0)
println("표준편차: ${"%.2f".format(scores.standardDeviation())}")
val words = listOf("cat", "dog", "cat", "bird", "cat", "dog")
println("최빈값: ${words.mostFrequent()}")
val items = (1..50).toList()
println("2페이지: ${items.page(2, 10)}")
println("6페이지: ${items.page(6, 10)}")
}학습 팁
도메인별 확장 함수를 별도 파일(예: CollectionExtensions.kt)에 모아두면 팀 전체가 재사용할 수 있습니다.
주의할 점
확장 함수는 가상 디스패치를 지원하지 않습니다. 런타임 타입이 아닌 컴파일 타입 기준으로 호출되므로 상속 계층에서 주의하세요.
자주 묻는 질문
커스텀 컬렉션 확장란 무엇인가요?
확장 함수로 도메인 특화 컬렉션 연산을 추가합니다. 재사용 가능한 유틸리티를 구성합니다.
커스텀 컬렉션 확장 학습 시 주의할 점은 무엇인가요?
확장 함수는 가상 디스패치를 지원하지 않습니다. 런타임 타입이 아닌 컴파일 타입 기준으로 호출되므로 상속 계층에서 주의하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.