DeveloPiano

[Kotlin] sumOf 함수 본문

Develop/Kotlin

[Kotlin] sumOf 함수

DevPi 2025. 2. 26. 13:41
반응형

Thumbnail

 

코틀린(Kotlin)은 강력하면서도 간결한 문법을 제공하는 프로그래밍 언어로, 다양한 컬렉션 연산을 쉽게 수행할 수 있도록 도와줍니다. 그중에서도 sumOf 함수는 컬렉션의 요소를 합산할 때 매우 유용한 함수입니다. 이번 포스팅에서는 sumOf 함수의 사용법과 실용적인 예제를 함께 살펴보겠습니다.


📌 sumOf 함수란?

코틀린의 sumOf 함수는 컬렉션의 각 요소를 특정 값으로 변환한 후, 이 값을 합산하는 기능을 합니다.

 

🔹 기본 문법

inline fun <T, R : Number> Iterable<T>.sumOf(selector: (T) -> R): R
  • Iterable<T>: 컬렉션(리스트, 셋 등)의 요소를 반복할 수 있는 인터페이스
  • selector: (T) -> R: 각 요소 T를 숫자 R로 변환하는 함수
  • 반환값: 변환된 값들의 합

sumOf는 각 요소를 변환하는 selector 람다 함수를 받아, 변환된 값을 모두 더한 결과를 반환합니다.


🛠 sumOf 사용 예제

1️⃣ 기본적인 사용법

리스트의 숫자 값을 합산하는 간단한 예제입니다.

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val sum = numbers.sumOf { it }
    println("합계: $sum") // 출력: 합계: 15
}

 

2️⃣ 객체 리스트에서 특정 필드의 합 구하기

객체 리스트에서 특정 필드의 값을 합산할 때 유용하게 사용할 수 있습니다.

data class Product(val name: String, val price: Double)

fun main() {
    val products = listOf(
        Product("노트북", 1500.0),
        Product("마우스", 30.0),
        Product("키보드", 70.0)
    )
    val totalPrice = products.sumOf { it.price }
    println("총 가격: $totalPrice") // 출력: 총 가격: 1600.0
}

 

3️⃣ 문자열 길이의 총합 구하기

컬렉션의 각 요소를 변환하여 문자열 길이의 합을 구할 수도 있습니다.

fun main() {
    val words = listOf("Kotlin", "Programming", "Language")
    val totalLength = words.sumOf { it.length }
    println("총 길이: $totalLength") // 출력: 총 길이: 25
}

 

4️⃣ map + sum 대신 sumOf 사용하기

sumOf 없이 mapsum을 조합해서 같은 결과를 얻을 수도 있지만, sumOf를 사용하면 더 간결하게 작성할 수 있습니다.

val numbers = listOf(1, 2, 3, 4, 5)

// 일반적인 방식
val sum1 = numbers.map { it }.sum()

// sumOf 사용
val sum2 = numbers.sumOf { it }

println("sum1: $sum1, sum2: $sum2") // 출력: sum1: 15, sum2: 15

sumOfmapsum을 따로 사용하지 않아도 되므로 코드가 더욱 깔끔해집니다.


🎯 sumOf 사용 시 주의할 점

반환 타입 주의: sumOf의 반환 타입은 selector가 반환하는 숫자 타입을 따릅니다. 예를 들어, Int 값을 반환하면 Int, Double을 반환하면 Double 타입이 됩니다.

val numbers = listOf(1, 2, 3, 4, 5)
val sumInt = numbers.sumOf { it } // Int 타입 반환
val sumDouble = numbers.sumOf { it.toDouble() } // Double 타입 반환

 

널 값 처리: sumOfnull을 허용하지 않으므로, null 값이 있을 경우 filterNotNull() 등을 활용해야 합니다.

val numbers = listOf(1, 2, null, 4, 5)
val sum = numbers.filterNotNull().sumOf { it }
println("합계: $sum") // 출력: 합계: 12

✨ 결론

코틀린의 sumOf 함수는 컬렉션의 요소를 변환하여 합산할 때 매우 유용한 함수입니다. mapsum을 조합하는 것보다 간결하고 가독성이 좋아, 실무에서도 적극적으로 활용할 수 있습니다.

다음과 같은 경우 sumOf를 적극 활용하세요!

  • 객체 리스트에서 특정 필드의 총합을 구할 때
  • 문자열 리스트에서 총 길이를 계산할 때
  • mapsum을 함께 사용할 필요가 있을 때

앞으로 코틀린을 활용한 더욱 효율적인 개발을 위해 sumOf 함수를 잘 활용해 보세요! 🚀

반응형