2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

코틀린의 컬렉션 함수 중 map과 filter의 차이는 무엇인가요?

_____
Q1: 코틀린에서 `map` 함수는 무엇인가요?
A1: `map` 함수는 컬렉션의 각 원소에 주어진 변환 함수를 적용하여 새로운 컬렉션을 생성하는 함수입니다. 원본 컬렉션의 크기는 동일하지만, 각 원소는 변환 결과로 변경됩니다.

---

Q2: 코틀린에서 `filter` 함수는 무엇인가요?
A2: `filter` 함수는 컬렉션의 각 원소에 대해 주어진 조건(predicate)을 검사하여, 조건을 충족하는 원소들만 포함하는 새로운 컬렉션을 생성합니다. 원본 컬렉션보다 크기가 같거나 작을 수 있습니다.

---

Q3: `map`과 `filter` 함수의 주요 차이점은 무엇인가요?
A3:
- `map`은 각 원소를 변환하여 모든 원소를 결과에 포함시킵니다.
- `filter`는 원소를 변환하지 않고, 조건에 맞는 원소만 선별 하여 결과에 포함시킵니다.

---

Q4: `map`과 `filter`를 함께 사용하면 어떻게 되나요?
A4: 보통 `filter`로 조건을 만족하는 원소만 먼저 걸러내고, `map`으로 변환하는 순서로 사용됩니다. 예를 들어, 리스트에서 짝수만 골라 제곱하려면 `list.filter { it % 2 == 0 }.map { it * it }`처럼 씁니다.

---
Q5: `map`과 `filter`를 사용할 때 주의할 점이 있나요?
A5:
- `map`은 항상 원본 컬렉션 크기와 동일한 결과 컬렉션을 만듭니다.
- `filter`는 일부 원소를 걸러내므로 결과 크기가 달라집니다.
- 두 함수 모두 원본 컬렉션을 변경하지 않고, 새로운 컬렉션을 반환합니다.

---

Q6: 간단한 예제로 각각 어떻게 동작하는지 보여줄 수 있나요?
A6:
```kotlin
val numbers = listOf(1, 2, 3, 4, 5)

// map: 각 원소를 두 배로
val doubled = numbers.map { it * 2 } // [2, 4, 6, 8, 10]

// filter: 짝수만 걸러내기
val evens = numbers.filter { it % 2 == 0 } // [2, 4]
```

---

요약하자면, `map`은 변환(transform) 함수, `filter`는 조건(predicate) 함수로 원소를 걸러내는 역할 이라는 점이 가장 큰 차이입니다.
Kotlin의 컬렉션 함수 중 `map`과 `filter`는 모두 컬렉션을 변환하거나 필터링하는 데 사용되는 고차 함수입니다.

그러나 이 두 함수는 그 목적과 동작 방식에서 중요한 차이가 있습니다.

아래에서 이 두 함수의 차이점과 사용 사례를 자세히 살펴보겠습니다.

1. 기본 개념 - map : `map` 함수는 주어진 컬렉션의 각 요소에 대해 변환 함수를 적용하여 새로운 컬렉션을 생성합니다.

즉, 원래의 컬렉션의 각 요소를 다른 형태로 변환하는 데 사용됩니다.

이 과정에서 원래의 요소는 유지되지 않고, 변환된 결과로 새로운 요소가 생성됩니다.

- filter : `filter` 함수는 주어진 컬렉션의 각 요소에 대해 조건을 검사하여, 조건을 만족하는 요소만을 포함하는 새로운 컬렉션을 생성합니다.

즉, 원래의 컬렉션에서 특정 조건을 만족하는 요소들만 추출하는 데 사용됩니다.



2. 반환되는 컬렉션의 형태 - map : `map`은 원래 컬렉션의 크기와 동일한 크기의 새로운 컬렉션을 반환합니다.

각 요소가 변환되지만, 요소의 수는 변하지 않습니다.

예를 들어, 리스트의 각 요소를 제곱하는 경우, 원래 리스트의 크기와 같은 크기의 새로운 리스트가 생성됩니다.

- filter : `filter`는 조건을 만족하는 요소만을 포함하므로, 반환되는 컬렉션의 크기는 원래 컬렉션의 크기보다 작거나 같을 수 있습니다.

예를 들어, 리스트에서 짝수만 필터링하는 경우, 결과 리스트의 크기는 원래 리스트의 짝수의 개수에 따라 달라집니다.



3. 사용 예시 - map 사용 예시 : ```kotlin val numbers = listOf(1, 2, 3, 4,

5) val squaredNumbers = numbers.map { it * it } println(squaredNumbers) // [1, 4, 9, 16, 25] ``` - filter 사용 예시 : ```kotlin val numbers = listOf(1, 2, 3, 4,

5) val evenNumbers = numbers.filter { it % 2 == 0 } println(evenNumbers) // [2, 4] ```

4. 결합 사용 `map`과 `filter`는 종종 함께 사용되기도 합니다.

예를 들어, 특정 조건을 만족하는 요소를 필터링한 후, 그 요소들에 대해 변환을 적용할 수 있습니다.

```kotlin val numbers = listOf(1, 2, 3, 4,

5) val result = numbers.filter { it % 2 == 0 }.map { it * it } println(result) // [4, 16] ``` 위의 예시에서는 먼저 짝수만 필터링한 후, 그 짝수들을 제곱하여 새로운 리스트를 생성합니다.



5. 성능 고려사항 `map`과 `filter`는 각각의 요소에 대해 함수를 호출하므로, 컬렉션의 크기가 클 경우 성능에 영향을 미칠 수 있습니다.

특히, `filter`는 조건을 만족하지 않는 요소를 무시하므로, 조건을 검사하는 비용이 발생합니다.

반면, `map`은 모든 요소에 대해 변환 함수를 적용하므로, 변환 함수의 복잡성에 따라 성능이 달라질 수 있습니다.

결론 Kotlin의 `map`과 `filter`는 컬렉션을 다루는 데 있어 매우 유용한 도구입니다.

`map`은 각 요소를 변환하여 새로운 컬렉션을 생성하는 데 사용되며, `filter`는 조건을 만족하는 요소만을 추출하여 새로운 컬렉션을 생성하는 데 사용됩니다.

이 두 함수를 적절히 활용하면, 코드의 가독성을 높이고, 복잡한 데이터 처리 작업을 간결하게 수행할 수 있습니다.

작성자: 최은서 [비회원] | 작성일자: 1년 전 2024-09-09 09:47:13
조회수: 125 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.