상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - switchMap을 사용하여 마우스 이벤트를 처리하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap은 RxJS에서 사용하는 연산자 중 하나로, 주로 Observable을 다룰 때 내부에서 새로운 Observable을 생성하고 이전에 생성된 Observable을 자동으로 취소(cancel)하는 역할을 합니다. 이를 통해 특히 이벤트 스트림에서 발생하는 비동기 작업을 효율적으로 관리할 수 있습니다. 마우스 이벤트를 처리할 때 switchMap을 사용하는 방법을 구체적으로 설명하겠습니다. 1. 기본 개념 이해 마우스 이벤트(예: mousemove, mousedown, mouseup)를 RxJS의 Observable로 감싸면 이벤트 스트림을 쉽게 다룰 수 있습니다. 어떤 마우스 버튼을 누른 상태에서 특정 작업(예: 드래그, 그리기 등)을 수행하고, 버튼을 놓으면 해당 작업을 종료하는 시나리오가 자주 있습니다. 이럴 때 switchMap을 사용하면 "마우스 다운 이벤트 발생 시 마우스 무브 이벤트 스트림으로 전환하고, 마우스 업 이벤트가 발생하면 종료하는 형태"를 간편하게 처리할 수 있습니다. 2. 실습 개념 - mousedown 이벤트가 발생하면 mousemove 이벤트를 구독하는 새로운 Observable로 전환한다. - mouseup 이벤트를 감지해 현재의 mousemove Observable을 종료한다. 3. 코드 예제 설명 ```typescript import { fromEvent } from 'rxjs'; import { switchMap, takeUntil, map } from 'rxjs/operators'; // DOM 요소 const box = document.getElementById('box'); // mousedown 이벤트 스트림 const mouseDown$ = fromEvent(box, 'mousedown'); // mousemove 이벤트와 mouseup 이벤트 스트림 const mouseMove$ = fromEvent(document, 'mousemove'); const mouseUp$ = fromEvent(document, 'mouseup'); mouseDown$ .pipe( // mousedown이 발생하면 mousemove 이벤트 스트림으로 전환하고, // mouseup 이벤트가 발생하면 자동으로 unsubscribe 하도록 처리 switchMap((startEvent) => { return mouseMove$.pipe( // mousemove마다 좌표를 매핑 map(moveEvent => ({ x: moveEvent.clientX, y: moveEvent.clientY })), // mouseup 이벤트가 발생하면 이 스트림을 종료 takeUntil(mouseUp$) ); }) ) // 실제 구독, 드래그 시 좌표 얻기 .subscribe(position => { console.log('Dragged to: ', position); // 여기서 position값을 이용해 UI 업데이트 가능 }); ``` - fromEvent로 마우스 이벤트 각각을 Observable로 감쌌습니다. - mousedown 이벤트가 시작점 역할을 하여 switchMap 안의 함수가 실행됩니다. - switchMap 안에서 mousemove 이벤트 스트림으로 전환하며, 이때 map으로 좌표만 추출합니다. - takeUntil 연산자를 이용해 mouseup 이벤트가 발생하면 mousemove 스트림을 종료해서 메모리 누수를 방지하고, 드래그 동작이 마무리됨을 알립니다. - switchMap 특성상 만약 사용자가 mousedown을 여러 번 빠르게 누르면 이전 드래그 스트림은 자동으로 종료되고, 최신 마우스 다운에 대응하는 mousemove 스트림만 활성화 됩니다. 4. 장점 요약 - 코드가 간결해지고 이벤트 구독 관리가 편해짐 - 메모리 누수를 방지할 수 있음 - 복잡한 이벤트 체이닝을 쉽게 다룰 수 있음 - 최신 이벤트에 대해서만 반응함 (불필요한 이전 이벤트 스트림 구독 취소) 5. 활용 예시 - 드래그 앤 드롭 UI 구성 - 그림판 애플리케이션에서 캔버스 위에 펜의 움직임 추적 - 슬라이더, 맵 이동 컨트롤 등 인터랙티브 UI 이벤트 처리 --- 정리하면, switchMap을 사용하면 마우스 다운 이벤트가 발생할 때마다 새로운 mousemove 스트림으로 교체하며, 마우스 업 이벤트로 해당 스트림을 종료하는 방식으로 마우스 이벤트를 깔끔하게 관리할 수 있습니다. 이는 복잡한 마우스 인터랙션에서 비동기 이벤트를 효과적으로 처리하는 패턴입니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기