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

switchMap에서 필터링을 추가하는 방법은?

_____
Q: RxJS의 switchMap 연산자에서 필터링을 추가하는 방법은 무엇인가요?

A: switchMap 내부에서 필터링을 적용하려면, 보통 switchMap 안에서 반환하는 Observable에 필터 연산자를 함께 사용합니다. 예를 들어, switchMap 안에서 from(), of() 등으로 Observable을 생성하고, 이 Observable에 filter 연산자를 연결하여 조건에 맞는 값만 방출하게 합니다.

---

예시:

```typescript
import { from } from 'rxjs';
import { switchMap, filter } from 'rxjs/operators';

source$.pipe(
switchMap(value =>
from(value.items).pipe(
filter(item => item.isActive) // isActive가 true인 항목만 통과
)
)
).subscribe(filteredItem => {
console.log(filteredItem);
});
```

---

설명:

- switchMap 내부에서 `from()`과 같은 Observable 생성 함수를 이용해 내부 Observable을 만듭니다.
- 내부 Observable에 `filter()` 연산자를 추가하여 특정 조건을 만족하는 값만 방출합니다.
- 이렇게 하면 switchMap이 원본 Observable에서 받은 값을 변환하는 동시에, 필터링까지 수행할 수 있습니다.

---

참고사항:

- 만약 switchMap 바로 이전 단계에서 필터링이 가능하다면, `filter()`를 그 단계에 적용해 불필요한 switchMap 호출을 줄일 수도 있습니다.
- 내부 Observable이 컴플리트 되지 않고, 여러 값들을 방출하는 경우에 filter를 사용하면 원하는 값만 downstream에 넘길 수 있습니다.
switchMap 연산자는 RxJS에서 주로 내부 Observable을 다룰 때 사용됩니다.

어떤 Observable이 방출하는 값에 따라 새로운 Observable로 전환(switch)하고 그 결과를 방출하는 역할을 하죠. 그런데 switchMap을 사용할 때 필터링 조건을 추가해서 특정 값들만 처리하고 싶으면 어떻게 해야 할까요? 먼저 이해해야 할 점은 switchMap 자체는 변환(mapping) 연산자이며, 직접적인 필터링 기능은 없습니다.

즉, switchMap 안에서 값의 필터링을 하려면 보통 다음 두 가지 방법 중 하나를 사용합니다.

1. switchMap 바깥쪽에서 필터링하기 switchMap을 적용할 Observable이 방출하는 값에 대해 먼저 filter 연산자를 사용하여 조건에 맞는 값만 통과시키는 방법입니다.

예를 들어, `source$.pipe(filter(value => value >

10), switchMap(...))` 처럼 하면 10보다 큰 값만 switchMap이 처리하게 됩니다.



2. switchMap 내부에서 필터링하기 switchMap 안에서 새 Observable을 생성할 때, 내부 Observable에서 filter 연산자를 적용할 수 있습니다.

예를 들면: ```typescript source$.pipe( switchMap(value => innerObservable$.pipe( filter(innerValue => innerValue === value) )) ) ``` 이렇게 하면 source$ 에서 받은 값에 대해 내부 Observable의 값 중 특정 조건에 맞는 값만 방출됩니다.



3. 조건에 따른 switchMap 분기 처리 switchMap을 호출하기 전에 조건문을 두어 특정 조건에 따라 다른 Observable로 전환하거나 빈 Observable을 반환하는 방법입니다.

예를 들어: ```typescript source$.pipe( switchMap(value => { if (value >

10) { return someObservable(value); } else { return EMPTY; // 아무것도 방출하지 않고 끝내는 Observable } }) ) ``` 이렇게 하면 조건에 맞지 않는 값에 대해 아무 결과도 내지 않습니다.

switchMap에서 필터링을 추가하려면 switchMap 앞뒤로 filter를 적용하거나, switchMap 내부에서 filter를 사용하는 방법, 또는 조건문으로 분기 처리하는 방법을 조합해서 활용할 수 있습니다.

상황에 맞게 가장 적합한 방식을 선택하시면 됩니다.

작성자: 김수현 [비회원] | 작성일자: 1년 전 2025-05-25 12:52:01
조회수: 163 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.