KOTLIN · 컬렉션
fold/reduce 심화
fold와 reduce로 컬렉션을 단일 값으로 누적합니다. runningFold로 중간 결과도 추적합니다.
컬렉션고급foldreducerunningFoldaccumulator
핵심 설명
fold와 reduce로 컬렉션을 단일 값으로 누적합니다. runningFold로 중간 결과도 추적합니다.
Kotlin code
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
// fold: 초기값 + 누적
val sum = numbers.fold(0) { acc, n -> acc + n }
println("합계: $sum") // 15
// reduce: 첫 원소가 초기값
val product = numbers.reduce { acc, n -> acc * n }
println("곱: $product") // 120
// foldRight: 오른쪽부터 누적
val reversed = numbers.foldRight("") { n, acc -> "$acc$n" }
println("역순: $reversed") // 54321
// runningFold: 중간 결과 리스트
val running = numbers.runningFold(0) { acc, n -> acc + n }
println("누적합: $running") // [0, 1, 3, 6, 10, 15]
// 실용 예: 문자열 통계
val text = "hello kotlin world"
val charFreq = text.filter { it != ' ' }
.fold(mutableMapOf<Char, Int>()) { map, c ->
map.apply { merge(c, 1, Int::plus) }
}
println("빈도: $charFreq")
}학습 팁
runningFold는 누적 합계, 이동 통계 등 중간 상태 추적이 필요한 경우에 유용합니다.
주의할 점
reduce는 빈 컬렉션에서 UnsupportedOperationException을 던집니다. 빈 컬렉션이 가능하면 fold나 reduceOrNull을 사용하세요.
자주 묻는 질문
fold/reduce 심화란 무엇인가요?
fold 와 reduce 로 컬렉션을 단일 값으로 누적합니다. runningFold 로 중간 결과도 추적합니다.
fold/reduce 심화 학습 시 주의할 점은 무엇인가요?
reduce 는 빈 컬렉션에서 UnsupportedOperationException 을 던집니다. 빈 컬렉션이 가능하면 fold 나 reduceOrNull 을 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.