상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - switchMap을 사용하여 교차 이벤트를 처리하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap은 RxJS에서 자주 사용되는 연산자로, 특히 이벤트 스트림이 발생할 때 이전에 구독한 내부 옵저버블을 취소하고 새로운 옵저버블로 전환할 때 유용합니다. ‘교차 이벤트’를 처리한다는 것은 보통 특정 이벤트가 연달아 발생해서 이전 이벤트의 처리 결과가 더 이상 필요 없거나, 취소되어야 할 때를 의미합니다. 예를 들어, 빠르게 변하는 입력값에 대한 비동기 요청을 다룰 때 이전 요청은 무시하고 최신 요청 결과만 처리하고 싶을 때가 많습니다. switchMap 작동 원리 - 외부 옵저버블(보통 이벤트 스트림)에서 값이 발생하면 switchMap 내부 함수가 호출되어 내부 옵저버블을 생성합니다. - 새로운 값이 다시 들어오면 이전에 만들었던 내부 옵저버블을 자동으로 구독 해지(unsubscribe)하고, 새로 만든 내부 옵저버블의 결과를 구독합니다. - 즉, 이전 이벤트의 결과는 더 이상 필요 없으면 버리고 가장 최신 이벤트에 대해서만 응답하는 패턴을 자연스럽게 만들 수 있습니다. --- switchMap으로 교차 이벤트 처리하는 방법 1. 이벤트 소스 설정 예를 들어, 사용자의 입력 이벤트(`input` 이벤트나 버튼 클릭 등)를 RxJS의 `fromEvent` 등을 통해 옵저버블로 만듭니다. 2. switchMap 적용 이벤트 스트림에 `switchMap`을 적용하고, 내부에는 비동기 작업(예: HTTP 요청, 타이머, 기타 비동기 연산)을 반환하는 함수가 위치합니다. 이렇게 하면 이전 비동기 작업 취소가 자동으로 처리됩니다. 3. 이전 작업 자동 취소 새 이벤트가 오면 이전에 시작한 비동기 작업은 곧바로 중단되고, 새로운 작업이 시작됩니다. 이를 통해 사용자는 가장 최신 이벤트에 대한 결과만 받게 됩니다. --- 예시 코드 설명 만약 사용자가 검색창에 입력할 때마다 서버에 검색어를 보내 결과를 가져온다고 가정하겠습니다. ```typescript import { fromEvent } from 'rxjs'; import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators'; import { ajax } from 'rxjs/ajax'; const searchBox = document.getElementById('search'); const input$ = fromEvent(searchBox, 'input'); input$.pipe( debounceTime(300), // 사용자가 300ms 동안 멈출 때까지 기다림 distinctUntilChanged(), // 동일한 입력 무시 switchMap(event => { const query = event.target.value.trim(); if (!query) { return EMPTY; // 빈 입력일 때는 빈 결과 반환 } // ajax.getJSON()은 내부적으로 옵저버블 반환 return ajax.getJSON(`https://api.example.com/search?q=${encodeURIComponent(query)}`); }) ).subscribe(results => { // 결과 렌더링 console.log(results); }); ``` 위 코드는 사용자가 빠르게 입력해도 마지막 이벤트에 대해서만 서버 요청을 보내고, 이전에 요청된 서버 응답은 무시(구독 해지)하도록 구현되어 있습니다. --- 요약 - switchMap은 각 이벤트마다 내부 옵저버블을 생성하고, 새로운 이벤트가 올 때 이전 옵저버블을 취소합니다. - 이를 통해 교차 이벤트(동시에 여러 비동기 요청이 교차되는 상황)를 깔끔하게 처리할 수 있습니다. - 특히 비동기 데이터 요청이나 이벤트 중첩 시 <a href='https://sangseek.com/sangseeks/중복 처리/ko'>중복 처리</a> 방지가 필요할 때 사용하면 효과적입니다. - debounceTime, distinctUntilChanged 등과 함께 쓰면 더욱 최적의 UX를 제공합니다. 이처럼 switchMap을 사용하면 이벤트가 교차하는 상황에서도 최신 이벤트 위주로 반응하고 이전 이벤트에 대한 불필요한 작업 취소를 자동으로 수행할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기