상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
미역을 즐기는 나라에서의 미역 소비량은 어떤가요?
미역을 사랑하는 사람들의 추천 요리는 무엇인가요?
미역의 크기나 모양에 따라 어떤 차이가 있나요?
미역을 활용한 체험 키트는 어떤 것들이 있나요?
TSMC의 고객 맞춤형 솔루션은 무엇인가요?
금강석이 사용된 유명한 광고 캠페인은 무엇인가요?
금강석의 이론과 응용에 대해 설명해 주세요.
아침에 날씨가 좋으면 기분이 더 좋아지나요?
실버와 구리의 합작품은 어떤 이점이 있나요?
브로콜리 요리를 더욱 풍부하게 하는 재료는?
수족구병에 대한 올바른 정보는 어디에서 찾을 수 있나요?
시력이 좋고 나쁜 경우의 차이는 무엇인가요?
Previous
Next
수정하기 - switchMap을 사용하여 이벤트를 처리하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap은 주로 RxJS에서 사용하는 연산자로, Observable 스트림을 변환(transform)할 때 매우 유용합니다. 특히 이벤트를 처리할 때, 이전에 실행 중이던 내부 Observable을 취소하고 가장 최신 이벤트에 대해서만 작업을 수행하고 싶을 때 사용합니다. switchMap으로 이벤트 처리하는 방법 1. 이벤트 스트림 생성하기 이벤트를 처리하려면 먼저 Observable 형태로 이벤트 스트림을 만들어야 합니다. 예를 들어, 검색창에 사용자가 입력하는 텍스트 이벤트를 감지하고 싶다면, `fromEvent`를 사용하거나 Angular 환경에서는 `FormControl`의 `valueChanges`를 사용할 수 있습니다. 2. switchMap 적용하기 이벤트로부터 생성된 Observable 위에 `switchMap` 연산자를 적용합니다. 여기서 `switchMap`은 들어오는 이벤트(예: 사용자의 입력값)를 받고, 그 이벤트에 대응하는 새로운 Observable을 반환하는 함수로 동작합니다. 3. 내부 Observable 정의하기 `switchMap` 내 함수에서는 보통 비동기 작업을 하는 Observable을 반환합니다. 예를 들어, HTTP 요청이나 타이머 같은 즉각 완료되지 않는 작업이 대표적입니다. 이렇게 하면 이전에 만들어진 내부 Observable은 자동으로 취소(구독 해지)되고, 가장 최근의 이벤트에 대한 작업 결과만 반영됩니다. 4. 결과 구독하기 마지막으로, `switchMap` 이후에 나오는 Observable을 구독하여 결과를 처리합니다. 예를 들어, 서버에서 받은 응답 데이터를 UI에 반영하거나, 에러를 처리하는 로직을 작성합니다. --- 예시로 이해하기 (검색어 자동완성 시나리오) - 사용자가 검색어를 입력할 때마다 서버에 자동완성 요청을 보냅니다. - <a href='https://sangseek.com/sangseeks/이전 입력/ko'>이전 입력</a> 값을 바탕으로 한 요청은 취소하고, 가장 최근 입력값에 대한 요청만 처리하기 위해 `switchMap`을 사용합니다. ```typescript import { fromEvent } from 'rxjs'; import { <a href='https://sangseek.com/sangseeks/debounce/ko'>debounce</a>Time, distinctUntilChanged, switchMap, map } from 'rxjs/operators'; import { ajax } from 'rxjs/ajax'; // 검색 input 엘리먼트 참조 const searchInput = document.getElementById('search'); // 입력 이벤트 스트림 생성 const input$ = fromEvent(searchInput, 'input').pipe( map((event: InputEvent) => (event.target as HTMLInputElement).value), debounceTime(300), // 사용자가 입력 멈출 때까지 잠시 기다림 distinctUntilChanged(), // 이전 값과 달라졌을 때만 반응 switchMap(searchTerm => ajax.getJSON(`https://api.example.com/search?q=${searchTerm}`) ) ); // 결과 구독 input$.subscribe(results => { console.log('자동완성 결과:', results); }); ``` - `fromEvent`로부터 입력값 스트림을 받고, - `debounceTime`과 `distinctUntilChanged`로 불필요한 중복 요청을 줄이며, - `switchMap` 안에서 <a href='https://sangseek.com/sangseeks/AJAX/ko'>AJAX</a> 요청 Observable을 반환하는데, - 이전 요청이 있다면 자동으로 취소되며, 가장 최신 요청 결과만 처리합니다. --- 핵심 포인트 - 이전 내부 Observable이 자동으로 취소된다 즉, 최신 이벤트에 대한 응답만 반영되어 불필요한 중복 작업과 응답으로 인한 오버헤드가 줄어든다. - 비동기 작업이나 HTTP 요청 처리 시에 유용하다 여러 이벤트가 빠르게 들어올 때 이전 작업을 중단하고 새 작업에 집중할 수 있다. - 내부 Observable을 반환하는 함수 필요 switchMap은 들어오는 값에서 새로운 Observable을 내보내야 하므로, 비동기 작업을 Observable로 감싸서 반환해야 한다. --- 요약하자면, switchMap은 이벤트 스트림에서 새로운 이벤트가 들어올 때마다 이전 비동기 처리를 취소하고 최신 이벤트에 대해서만 작업하기 위해 사용하는 RxJS 연산자이며, 검색, 입력 처리, 실시간 데이터 요청 등 다양한 이벤트 처리에 매우 적합한 방식을 제공합니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기