이번에 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/
반응형
'Kotlin' 카테고리의 다른 글
[이펙티브 코틀린] 3장 재사용성 (1) | 2023.06.18 |
---|---|
[Kotlin] != null과 ?.let 퍼포먼스 차이가 있을까? (2) | 2023.02.06 |
[Kotlin] Collection 관련 함수들 (filter, map, flatmap) (0) | 2023.02.03 |
[Kotlin] 문자열 Count 하기 (0) | 2022.08.01 |
[Kotlin] 데이터 클래스 (Data class) (0) | 2022.08.01 |
댓글