상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - switchMap과 switch를 구분하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap과 switch는 프로그래밍과 관련된 용어로, 특히 <a href='https://sangseek.com/sangseeks/자바/ko'>자바</a>스크립트 라이브러리인 RxJS에서 자주 사용됩니다. 두 개념은 이름이 비슷하지만 역할과 사용처가 다르기 때문에, 차이점을 명확히 이해하는 것이 중요합니다. 다음은 switchMap과 switch의 차이점을 자세히 설명한 내용입니다. 1. switchMap이란 무엇<a href='https://sangseek.com/sangseeks/인가/ko'>인가</a>? switchMap은 RxJS에서 제공하는 <a href='https://sangseek.com/sangseeks/연산자/ko'>연산자</a>(오퍼레이터) 중 하나로, 주로 Observable 스트림을 변환하거나 전환할 때 사용합니다. switchMap은 원본 Observable이 방출한 값을 받아서 그 값을 기반으로 새로운 Observable을 생성하고, 내부적으로 이 새로운 Observable로 전환(subscribe)합니다. 특징: - 각 값에 대해 새로운 Observable을 만들고 이를 구독하나, 이전에 생성된 Observable이 아직 완료되지 않았다면 그것을 취소(unsubscribe)하고 새 Observable로 전환합니다. - 따라서, 원본 Observable에서 값이 빠르게 여러 번 방출될 때, 가장 마지막에 생성된 Observable만 구독이 유지되고 이전 것은 자동으로 해지됩니다. - 비동기 작업(예: HTTP 요청)을 다루는 상황에서 흔히 쓰이며, 이전 요청을 취소하고 최신 요청 결과만 처리하는 데 유용합니다. 2. switch란 무엇인가? switch는 여러 가지 맥락에서 쓰일 수 있지만, RxJS에서 "switch"라는 연산자 자체는 없으며, 과거 버전에서는 “switch”라는 연산자를 제공했으나 현재는 "switchAll" 혹은 "switchMap"으로 대체되었습니다. 즉, 오늘날 RxJS에서 "switch"라고 하면 과거의 switch 연산자, 혹은 일반 프로그래밍의 switch 문을 뜻할 수 있습니다. - RxJS에서 switch 연산자는 내부 Observable들 중 가장 최신 Observable만 구독하는 방식입니다. 예를 들어, Observable이 여러 Observable을 방출하는 경우, 마지막에 방출된 Observable을 구독하고 나머지는 해제합니다. 현재 버전에서는 switchAll이라고 부르며, switchMap은 map과 switchAll을 합친 개념입니다. - 일반 프로그래밍에서 switch는 조건문으로 쓰입니다. 3. RxJS 관점에서 switchMap과 switch의 차이점 - switchMap은 원본 Observable의 값에 대해 함수를 받아, 그 함수가 반환하는 Observable로 전환하는 연산자입니다. 즉, 값 -> Observable 변환 + switch 기능을 결합한 것입니다. - switch(또는 switchAll)은 이미 Observable을 방출하는 Observable을 다루면서, 중첩 Observable들을 전환해 줍니다. 즉, Observable<Observable> 형태를 평탄화시키면서 마지막 방출된 내부 Observable만 구독됩니다. 쉽게 말하면: - switchMap(df) = map(df) + switchAll (원본 값들을 매핑 함수 df에서 반환하는 Observable로 변환한 후, 그 Observable들 중 가장 최신 Observable을 구독하는 것) - switchAll은 이미 Observable emitting Observable에서 최신 Observable로 전환 4. 요약하면 다음과 같습니다: - switchMap - 원본 Observable의 값에 따라 내부 Observable을 생성하는 함수(map)를 적용하고, - 내부 Observable 전환(switch) 기능을 포함한 연산자 - 보통 비동기 매핑 작업에 적합 - switch (혹은 switchAll) - Observable 중첩 구조인 Observable<Observable>을 다룰 때 가장 최신 내부 Observable만 구독하는 연산자 - 내부 Observable들을 교체해 가며 전환만 수행 5. 실제 사용 예 - switchMap 사용 예: 사용자가 검색어를 입력할 때마다 API 호출을 하고, 이전 API 요청은 취소해야 할 때: ```typescript searchTerms.pipe( switchMap(term => http.get(`/api/search?q=${term}`)) ) ``` - switchAll 사용 예: 이미 Observable을 방출하는 Observable이 있을 때: ```typescript const higherOrder$ = subject$.pipe( map(x => interval(x * 1000).pipe(take(2))) // Observable emitting Observable ); higherOrder$.pipe( switchAll() ).subscribe(console.log); ``` 6. 일반 프로그래밍의 switch와 혼동 주의 - 자바스크립트나 다른 언어에서 switch 문은 조건 분기문이라 완전히 다릅니다. RxJS의 switchMap과 switch는 비동기 스트림 처리에 특화된 연산자이고, switch 문과는 개념적으로 전혀 다르므로 문맥에 따라 구분해야 합니다. --- 정리 - switchMap은 Observable 값을 함수에 넣어 Observable을 반환하고 내부의 이전 Observable 구독을 취소하며 새 Observable로 전환하는 RxJS 연산자입니다. - switch(또는 switchAll)는 Observable<Observable> 형태에서 가장 최신 내 Observable만 구독하도록 하는 연산자입니다. - 즉, switchMap은 map과 switch 기능을 합친 것, switch는 기존 Observable을 평탄화하고 최신 Observable으로 전환하는 기능에 집중합니다. - 일반 프로그래밍의 조건문 switch와는 별개의 개념으로, RxJS의 문맥에서만 이해해야 합니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기