🖋️ Observable 와 Hot & Cold
- Observable은 비동기 프로그래밍을 위한 패턴
- 주로 ReactiveX 라이브러리에서 사용되며, 이벤트 스트림을 처리하는데 유용
- JavaScript에서 Observable은 주로 RxJS 라이브러리를 통해 사용
Observable
Hot Observable
Cold Observable
import { Observable } from 'rxjs';
// Cold Observable 생성
const coldObservable = new Observable(subscriber => {
subscriber.next(Math.random()); // 새로운 구독자마다 다른 값 방출
subscriber.complete();
});
coldObservable.subscribe(value => console.log(`Cold Observable: ${value}`));
coldObservable.subscribe(value => console.log(`Cold Observable: ${value}`));
// Hot Observable 생성
const hotObservable = new Observable(subscriber => {
const value = Math.random();
subscriber.next(value); // 같은 값을 모든 구독자에게 방출
subscriber.complete();
});
const sharedObservable = hotObservable.pipe(share());
sharedObservable.subscribe(value => console.log(`Hot Observable: ${value}`));
sharedObservable.subscribe(value => console.log(`Hot Observable: ${value}`));
언제 사용하는지
최적화 방법
AJAX 요청 처리
import { from } from 'rxjs';
import { ajax } from 'rxjs/ajax';
import { map, catchError } from 'rxjs/operators';
// AJAX 요청을 Observable로 변환
const fetchData = url => from(ajax.getJSON(url)).pipe(
map(response => response),
catchError(error => {
console.error('Error:', error);
return of({ error: true, message: error.message });
})
);
// 사용 예시
fetchData('https://api.example.com/data').subscribe(data => {
console.log('Data:', data);
});
상태 관리 예시
import { BehaviorSubject } from 'rxjs';
// 상태를 관리할 BehaviorSubject 생성
const state$ = new BehaviorSubject({ count: 0 });
// 상태를 구독하고 변화에 따라 UI 업데이트
state$.subscribe(state => {
console.log('State:', state);
document.getElementById('counter').innerText = state.count;
});
// 상태를 업데이트하는 함수
const increment = () => {
const currentState = state$.getValue();
state$.next({ count: currentState.count + 1 });
};
// 버튼 클릭 이벤트와 상태 업데이트 연결
document.getElementById('incrementButton').addEventListener('click', increment);
📰 정리
Observable은 비동기 프로그래밍에서 매우 유용한 도구이며, 특히 이벤트 스트림을 처리하거나 복잡한 상태 관리를 할 때 강력한 기능을 제공합니다. Hot과 Cold Observable의 개념을 이해하고, RxJS와 같은 라이브러리를 통해 다양한 비동기 작업을 쉽게 처리할 수 있습니다. 비동기 프로그래밍을 효과적으로 구현하기 위해 RxJS의 다양한 연산자를 학습하고 적용