본문 바로가기
Kotlin

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

by 너츠너츠 2023. 2. 3.

이번에 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/

반응형

댓글