Observables와 Promises의 비교 및 선택 기준
많은 프로그래밍 언어에서 비동기 작업을 처리하기 위해 Promises와 Observables를 사용합니다. 이번 글에서는 Observables와 Promises의 차이점과 각각을 선택할 때 고려해야 할 기준에 대해 알아보겠습니다.
Observables vs Promises
1. 기본 개념
- Promises: 비동기 작업의 결과를 나타내는 객체로, 성공 또는 실패만을 처리합니다. 한 번만 resolve하거나 reject하면 종료됩니다.
- Observables: 시간에 따른 값들의 스트림을 표현하는 개념으로, 여러 값들을 발행하고 처리하는 데 사용됩니다.
2. 사용 방법
- Promises:
new Promise()
를 통해 생성하며,then()
과catch()
메서드를 통해 비동기 작업의 결과를 처리합니다. - Observables:
new Observable()
을 통해 생성하며,subscribe()
메서드를 사용하여 값을 구독하고 처리합니다.
// Promise의 사용 예시
const promise = new Promise((resolve, reject) => {
// 비동기 작업 수행
if (/* 성공 조건 */) {
resolve(result);
} else {
reject(error);
}
});
promise
.then(result => {
// 성공 처리
})
.catch(error => {
// 실패 처리
});
// Observable의 사용 예시
const observable = new Observable(observer => {
try {
// 값 발행
observer.next(value);
observer.complete();
} catch(error) {
observer.error(error);
}
});
observable.subscribe({
next(value) {
// 값 처리
},
error(error) {
// 에러 처리
},
complete() {
// 완료 처리
}
});
3. 다중 값 처리
- Promises: 단일 값만 처리 가능하며, 여러 값을 처리하려면 배열 또는 반복문을 통해 호출해야 합니다.
- Observables: 여러 값을 스트림으로 처리할 수 있으며,
next()
메서드를 통해 여러 값을 발행할 수 있습니다.
4. 취소 기능
- Promises: 한 번 비동기 작업이 진행되면 취소할 수 없습니다.
- Observables:
unsubscribe()
를 호출하여 구독 취소가 가능합니다.
5. 작업 방식
- Promises: 결과를 반환하는 방식으로 동작하며, 한 번 반환된 결과는 재사용할 수 없습니다.
- Observables: 값들의 스트림을 반환하고, 결과를 여러 번 사용할 수 있습니다.
Observables 또는 Promises 선택 기준
- 단일 비동기 작업을 처리할 때는 Promises를 사용하는 것이 간편합니다.
- 여러 값을 처리하거나 취소가 필요한 경우 Observables를 선택하는 것이 유용합니다.
- Observables는 데이터 스트림의 특성상 복잡한 비동기 작업을 구현할 때 유용합니다.
- 라이브 데이터를 처리하거나 이벤트와 상호작용할 때 Observables를 사용할 수 있습니다.
#observables #promises