fold, reduce 및 runningFold
fold, reduce 및 누적 함수를 사용해 컬렉션 요소를 집계해 보세요.
fold, reduce 및 runningFold은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
집계 연산
fold와 축약은 컬렉션을 하나의 값으로 집계합니다. fold는 초기값을 받고, 축약은 첫 번째 요소를 초기값으로 사용합니다. runningFold는 모든 중간 결과를 반환합니다.
기본 fold
fold(seed) { acc, x -> ... }는 초기값으로 시작하여 각 요소를 누적값과 결합합니다.
fun main() {
val nums = listOf(1, 2, 3, 4)
val sum = nums.fold(0) { acc, n -> acc + n }
println(sum) // 10
}숫자가 아닌 초기값을 사용하는 fold
초기값은 어떤 타입이든 될 수 있습니다. fold는 List<T>를 완전히 다른 결과로 변환할 수 있습니다.
fun main() {
val words = listOf("hello", "world", "kotlin")
val joined = words.fold("") { acc, w -> if (acc.isEmpty()) w else "$acc, $w" }
println(joined) // hello, world, kotlin
}기본 축약
reduce는 첫 번째 요소를 초기값으로 사용합니다. 람다는 한 번에 두 요소를 결합합니다.
fun main() {
val nums = listOf(2, 3, 4, 5)
val product = nums.reduce { acc, n -> acc * n }
println(product) // 120
}빈 목록에 reduce를 사용하면 예외 발생
reduce에는 요소가 하나 이상 필요합니다. 안전하게 사용하려면 reduceOrNull을 사용하거나, 초기값을 지정하는 fold를 선호하십시오.
fun main() {
val empty: List<Int> = emptyList()
println(empty.reduceOrNull { a, b -> a + b }) // null
println(empty.fold(0) { a, b -> a + b }) // 0
}fold와 축약 비교
다른 결과 타입이나 기본값이 필요하면 fold를 사용하십시오. 결과 타입이 요소 타입과 같고 목록에 요소가 하나 이상 있으면 축약을 사용하십시오.
fun main() {
val nums = listOf(1, 2, 3, 4)
println(nums.reduce { a, b -> a + b }) // 10
println(nums.fold(100) { a, b -> a + b }) // 110 (seed 100)
}runningFold
runningFold는 모든 중간 누적값을 목록으로 반환하므로 누적 합계와 단계별 처리 흐름에 편리합니다.
fun main() {
val nums = listOf(1, 2, 3, 4)
val running = nums.runningFold(0) { acc, n -> acc + n }
println(running) // [0, 1, 3, 6, 10]
}누적 합계 예제
분석에서 흔히 사용하는 패턴인 월별 누적 합계입니다.
fun main() {
val monthly = listOf(100, 150, 80, 200, 120)
val cumulative = monthly.runningReduce { acc, x -> acc + x }
println(cumulative) // [100, 250, 330, 530, 650]
}fold로 맵 만들기
변경 가능한 맵에 누적하여 목록을 Map으로 접으십시오.
fun main() {
val words = listOf("apple", "banana", "cherry")
val byLetter = words.fold(mutableMapOf<Char, MutableList<String>>()) { acc, w ->
val key = w[0]
acc.getOrPut(key) { mutableListOf() }.add(w)
acc
}
println(byLetter)
}fold로 목록 만들기
fold는 시퀀스를 구조화된 목록으로 변환할 수 있습니다. 예를 들어 연속된 중복 항목을 그룹화할 수 있습니다.
fun main() {
val nums = listOf(1, 1, 2, 3, 3, 3, 4)
val grouped = nums.fold(mutableListOf<MutableList<Int>>()) { acc, n ->
if (acc.isEmpty() || acc.last().last() != n) acc.add(mutableListOf(n))
else acc.last().add(n)
acc
}
println(grouped) // [[1, 1], [2], [3, 3, 3], [4]]
}foldIndexed
각 요소와 함께 인덱스를 전달하므로 위치를 고려하는 집계에 유용합니다.
fun main() {
val nums = listOf(10, 20, 30)
val weighted = nums.foldIndexed(0) { i, acc, n -> acc + (i + 1) * n }
// 1*10 + 2*20 + 3*30 = 140
println(weighted)
}reduceRight
reduceRight는 오른쪽에서 왼쪽으로 집계합니다. 연산이 교환 법칙을 따르지 않을 때 중요합니다(예: 문자열 연결 순서).
fun main() {
val words = listOf("a", "b", "c", "d")
val leftToRight = words.reduce { acc, w -> "$acc-$w" }
val rightToLeft = words.reduceRight { w, acc -> "$w-$acc" }
println(leftToRight) // a-b-c-d
println(rightToLeft) // a-b-c-d (same here but operation matters)
}빠른 확인
모든 중간 누적값을 포함하는 목록을 반환하는 함수는 무엇입니까?
복습
fold는 초기값과 함께 집계하며 초기값은 어떤 타입이든 될 수 있습니다. 축약은 첫 번째 요소를 초기값으로 사용하므로 비어 있지 않아야 합니다. runningFold와 runningReduce는 모든 중간값을 반환합니다. 합계, 곱, 맵 만들기, 그룹화, 단계별 변환에 이 함수들을 사용하십시오.
자주 묻는 질문
“fold, reduce 및 runningFold” 강의는 무료인가요?
네 — “fold, reduce 및 runningFold” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“fold, reduce 및 runningFold”에서 뭘 배우나요?
fold, reduce 및 누적 함수를 사용해 컬렉션 요소를 집계해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“fold, reduce 및 runningFold” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- map과 flatMap: 모든 요소 변환하기
- filter, filterNot 및 partition
- fold, reduce 및 runningFold
- 파이프라인 연결하고 Sequence로 중간 목록 피하기