비동기 데이터 스트림에 기반을 둔 프로그래밍 패러다임이다. 기본적으로 리액티브 프로그래밍에서 모든 것을 데이터 스트림으로 본다.
동기/비동기를 각각 처리하던 방식을 하나의 데이터 스트림으로 처리하는 것이다.
데이터 스트림이라는 일관된 형식으로 만들고 이를 구독(subscribe)하여 데이터 스트림의 상태 변화에 반응하는 방식으로 동작하는 애플리케이션을 작성하는 것을 말한다.
데이터 스트림: 연속적인 데이터의 흐름
리액티브 프로그래밍은 데이터를 방출(emit)하는 옵저버블(Observable), 방출하는 데이터를 얻기 위한 객체 옵저버(Observer)로 구성되어있다. 옵저버는 옵저버블을 구독(subscribe)하여 데이터를 얻는다.
리액티브 프로그래밍의 장점은 Promise나 callback함수가 갖는 단점을 보완할 수 있다.
Promise의 단점
- 한 번에 하나의 데이터를 처리. 즉, 연속적인 데이터를 처리할 수 없음.
- 서버로 보낸 요청은 취소 불가능.
그리고 처리해야 할 데이터의 유형이 다양하다는 점이다.
동기는 동기대로, 비동기는 비동기대로 처리를 제각각 해주어야 하는데, 이를 일관된 방식으로 처리할 수 있다.
Operator는 옵저버블의 생성, 변환, 필터링, 에러 처리의 기능을 하는 함수이다.
오퍼레이터는 새로운 옵저버블을 반환하므로, 체이닝이 가능하다. 이 과정을 옵저버블 시퀀스(Observable Sequence)라고 한다.
배열과 같은 이터러블(Iterable)을 인자로 전달 받아 옵저버블을 생성한다.
옵저버블이 방출한 데이터를 인자로 전달받는 콜백 함수를 실행하고 그 결과값으로 이루어진 새로운 옵저버블을 반환한다. Array.prototype.map과 유사하게 동작한다.
옵저버블이 방출한 데이터를 인자로 전달받는 필터 함수를 실행하여 그 결과값이 true인 값만을 추출한 새로운 옵저버블을 반환한다. Array.prototype.filter와 유사하게 동작한다.
옵저버블을 구독한 후 완료했을 때, Subscription객체를 반환한다. 이 객체는 unsubscribe가 가능 하다. 보통 ngOnDestory에서 메모리 누수를 위해 추가한다.
이 글은 https://poiemaweb.com 을 참고하였습니다.