상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
노르웨이 여행 중 바다가 보이는 카페 추천은 어떤 게 있나요?
보홀 여행 중 주말에 열리는 특별한 행사는 무엇이 있나요?
혈전의 위치에 따라 증상이 어떻게 달라지나요?
표시광고법에 대한 교육은 어디서 받을 수 있나요?
녹스빌의 역사적 배경은 어떻게 되나요?
산사나무와 관련된린 식물의 종류는?
산사나무의 열매는 어떠한 생리활성 물질을 포함하고 있나요?
난시는 어떤 원리로 생길까?
ViewPager에서 화면 회전 시 데이터를 유지하는 방법은?
ViewPager의 크기가 다른 페이지를 지원하는 방법은?
ViewPager와 구글 지도 통합 구현 사례.
와이파이 중계기를 사용할 때 주의할 점은?
Previous
Next
수정하기 - switchMap을 사용하여 동적 데이터 소스를 구현하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap을 사용하여 동적 데이터 소스를 구현하는 방법에 대해 자세히 설명드리겠습니다. switchMap 개념 이해 RxJS의 `switchMap` 연산자는 Observable을 받아서 새로운 Observable로 전환하는 데 사용됩니다. 현재 구독 중인 Observable이 있을 때, 새로운 Observable이 방출되면 이전 Observable의 구독을 취소하고 새로운 Observable을 구독합니다. 이 특징 덕분에 최신 데이터 흐름만 반영하고 이전 흐름은 무시하는 데 유용합니다. --- 동적 데이터 소스에 대한 상황 이해 예를 들어 사용자가 선택하거나 입력한 값에 따라 서버에서 데이터를 가져오거나 특정 데이터 스트림을 변경해야 하는 경우가 있습니다. 이때 이전에 시작했던 요청이 아직 완료되지 않았어도 사용자의 새 입력이 들어왔다면, 이전 요청을 취소하고 새로운 요청만 처리해야 할 필요가 있습니다. --- switchMap을 활용한 동적 데이터 소스 구현 방법 1. 원하는 이벤트 스트림 만들기 우선 사용자 입력(버튼 클릭, 텍스트 입력 등)이나 어떤 조건의 변화를 Observable로 만들어야 합니다. 이를 위해 Angular에서는 주로 `fromEvent`, `FormControl.valueChanges`, `Subject` 등을 사용합니다. 2. switchMap 연산자 적용 이 이벤트 스트림에 `switchMap`을 적용하여, 해당 이벤트 발생 시 새로운 Observable(예: HTTP 요청 또는 다른 비동기 작업)을 만듭니다. 예를 들어 사용자의 키워드 입력이 있을 때마다 해당 키워드를 인자로 서버에 요청하는 HTTP Observable을 생성합니다. 3. 이전 요청 취소 및 최신 요청 활성화 `switchMap`은 이전에 생성된 Observable이 완료되지 않았더라도 바로 구독을 해지하고 새로운 Observable로 구독을 변경합니다. 이를 통해 항상 최신 요청 결과만 받아 처리할 수 있습니다. --- 구체적인 예시 ```typescript import { Component } from '@angular/core'; import { FormControl } from '@angular/forms'; import { HttpClient } from '@angular/common/http'; import { switchMap, debounceTime, distinctUntilChanged } from 'rxjs/operators'; @Component({ selector: 'app-search', template: ` <input [formControl]="searchControl" placeholder="검색어 입력" /> <ul> <li *ngFor="let item of results">{{ item.name }}</li> </ul> `, }) export class SearchComponent { searchControl = new FormControl(); results: any[] = []; constructor(private http: HttpClient) { this.searchControl.valueChanges .pipe( debounceTime(300), // 짧은 시간 내중복 요청 방지 distinctUntilChanged(), // 동일한 값 요청 방지 switchMap((keyword) => this.fetchData(keyword)) // switchMap 적용 ) .subscribe((data: any) => { this.results = data.items; // 서버 응답 결과 반영 }); } fetchData(keyword: string) { const url = `https://api.example.com/search?q=${keyword}`; return this.http.get<any>(url); } } ``` 위 예시 해설: - 사용자가 검색어를 입력하면 `searchControl.valueChanges`가 이벤트를 방출합니다. - `debounceTime`과 `distinctUntilChanged`를 통해 불필요한 요청을 줄입니다. - `switchMap`은 새로운 검색어가 입력될 때마다 이전에 진행된 HTTP 요청을 자동으로 취소하고 새로운 요청을 보냅니다. - 서버로부터 데이터를 받아 `results` 배열에 저장하여 화면에 결과를 보여줍니다. --- 요약 - `switchMap`은 입력값, 사용자 이벤트, 데이터 변화 등 동적 데이터 소스에 맞춰 비동기 Observable 흐름을 전환할 때 유용합니다. - 새로운 데이터 요청 시, 이전 요청을 자동으로 취소하기 때문에 네트워크 자원 낭비를 방지하고 빠른 반응성을 보장합니다. - Angular의 HTTP 요청, 사용자 입력 처리 등 다양한 비동기 처리에 적용할 수 있습니다. 이 방법을 활용하면 사용자의 동적인 행동에 따라 실시간으로 적절한 데이터 소스를 구독하고 최신 상태를 유지하는 강력한 애플리케이션을 만들 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기