Kotlin

[Kotlin] filter, map 호출 순서에 따른 성능 차이

너츠너츠 2023. 2. 3. 20:27

이번에 filter와 map의 호출 순서에 따른 성능차이를 확인해보려고 합니다.

 

map, filter VS filter, map

먼저 사용될 data class를 정의합니다.

data class Food(
    val name: String,
    val price: Int
)

 

1. map() 함수를 수행한 뒤, filter() 함수를 수행한다.

fun main() {
    val list = listOf(
        Food("chicken", 20000),
        Food("pizza", 25000),
        Food("sushi", 21000),
        Food("coffee", 5500),
        Food("beer", 3800)
    )

    val result = list.map(::mapToName)
        .filter(::filterByPrice)
    print(result)
}

fun mapToName(food: Food): Int {
    println("name : ${food.name}")
    return food.price
}

fun filterByPrice(price: Int): Boolean {
    println("price : $price")
    return price > 20000
}

// Result
// name: chicken
// name: pizza
// name: sushi
// name: coffee
// name: beer
// price : 20000
// price : 25000
// price : 21000
// price : 5500
// price : 3800
// [25000, 21000]
  • map()으로 인해 5번, filter()로 인해 5번 => 총 10회

 

2. filter() 함수를 수행한 뒤, map() 함수를 수행한다.

fun main() {
    val list = listOf(
        Food("chicken", 20000),
        Food("pizza", 25000),
        Food("sushi", 21000),
        Food("coffee", 5500),
        Food("bear", 3800)
    )

    val result = list.filter(::filterByPrice)
        .map(::mapToName)

    print(result)
}

fun mapToName(food: Food): Int {
    println("foodName : ${food.name}")
    return food.price
}

fun filterByPrice(food: Food): Boolean {
    println("price : ${food.price}")
    return food.price > 20000
}

data class Food(
    val name: String,
    val price: Int
)

// Result
// price : 20000
// price : 25000
// price : 21000
// price : 5500
// price : 3800
// foodName : pizza
// foodName : sushi
// [25000, 21000]
  • filter()로 인해 5번, filter()의 결과를 map()한 결과로 인해 2번 => 총 7회

연산의 순서를 변경 함으로써 수행되는 연산의 횟수를 줄여 성능을 개선할 수도 있다. 원소를 줄여주는 연산을 먼저 수행하면 전체 연산의 수를 줄일 수 있다.

 

<배운 점>

저는 이 부분을 생각하지 않고 항상  map, filter는 비슷한 역할을 한다고만 생각했는데 각 함수별 성능에 대해 고려하고 상황에 맞춰 사용해야겠다는 생각이 드는 탐구였습니다.

 

<참고>

https://woovictory.github.io/2020/07/05/Kotlin-Collection-Filter-Map/

반응형