PHpullh
학습 라이브러리/Kotlin/fold/reduce 심화

KOTLIN · 컬렉션

fold/reduce 심화

foldreduce로 컬렉션을 단일 값으로 누적합니다. runningFold로 중간 결과도 추적합니다.

컬렉션고급foldreducerunningFoldaccumulator

핵심 설명

foldreduce로 컬렉션을 단일 값으로 누적합니다. 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을 던집니다. 빈 컬렉션이 가능하면 foldreduceOrNull을 사용하세요.

자주 묻는 질문

fold/reduce 심화란 무엇인가요?

fold 와 reduce 로 컬렉션을 단일 값으로 누적합니다. runningFold 로 중간 결과도 추적합니다.

fold/reduce 심화 학습 시 주의할 점은 무엇인가요?

reduce 는 빈 컬렉션에서 UnsupportedOperationException 을 던집니다. 빈 컬렉션이 가능하면 fold 나 reduceOrNull 을 사용하세요.