반응형 프로그래밍(Reactive Programming)이란?
옵저버블(Observables) 이벤트 스트림을 구독(subscribe)하고, 이 스트림에 반응하는 방식으로 동작하는 애플리케이션을 만드는 것을 의미한다. 여기서 반응형 프로그래밍 패턴은 옵저버/옵저버블 패턴에서 좀 더 심화된 것이다. 옵저버블 스트림은 취소할 수 있으며, 스트림이 끝나는 지점을 알릴 수 있고, 구독자에게 전달된 데이터를 다양한 함수로 변환해서 다른 구독자에게 전달할 수도 있다. 옵저버블 패턴의 특징은 데이터 처리에 밀어 넣는 방식(Push model)을 택했다는 것이다. 반대로 받아오는 방식(Pull model)은 배열을 돌거나, Iterable 객체를 사용하거나, ES6 제너레이터 함수를 통해 구현한다. 전달된 데이터에 반응할 것인지, 데이터를 직접 받아올 것인지의 차이다. 옵저버블 스트림을 지원하는 라이버러리들은 이미 많이 구현되어 있으며, RxJS도 그 중 하나다. 그리고 RxJS 라이브러리는 Angular 내부에 통합되어 있기 떄문에, Angular 프레임워크 로직과 같이 사용해도 전혀 어색하지 않을 것이다.
1) Another use case for streams that have recently started getting traction is in front-end programming, where things such as keyboard input, mouse movement and clicks are modeled as streams of events. Functions are attached to these streams, handling each event, and usually ends up changing the application state. The application state changes is also modeled as a stream, so that other parts of the app (mainly the rendering part of the app) and react to the changed and do it's work. This architecture allows most of the application to be stateless. Because state is a major cause of bugs, having it contained in few places makes it easier to reason about the application and results in less bugs. Programming this way is often referred to as functional reactive programming (i.e. functions that react to streams of events).
옵저버 패턴(observer pattern)
옵저버 패턴은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있다. 이 패턴의 핵심은 옵저버 또는 리스너라 불리는 하나 이상의 객체를 관찰 대상이 되는 객체에 등록시킨다. 그리고 각각의 옵저버들은 관찰 대상인 객체가 발생시키는 이벤트를 받아 처리한다.
옵저버블(observable)
1. 연속된 데이터 스트림을 생성하는 객체이다.
2. 옵저버블에서 데이터가 만들어져서 옵저버인 구독자에게 전달된다.
3. 소켓이나, 배열, 화면에서 발생한 이벤트 등과 같은 데이터 소스를 한번에 하나씩, 연속으로 보내는 객체다.(스트리밍, streaming)
4. promise와 유사하지만 다음과 같은 큰 차이가 있다.
Observables |
Promise |
Observables handle multiple values over time |
Promises are only called once and will return a single value |
동작이 완료 되기 전에 이미 보낸 요청을 취소할 수 있다. |
이미 보낸 HTTP 요청을 취소할 수 없다. |
이러한 옵저버블의 특징은 real-time data를 다루기에 적합하며 옵저버블 스트림은 아래 세 가지 경우를 처리할 수 있다.
- 다음 엘리먼트를 전달한다.
- 에러를 전달한다.
- 스트리밍이 종료되었다는 신호를 전달한다.
옵저버(observer)
: 옵저버블이 생성한 연속된 데이터 스트림을 구독해서 사용하는 객체이며 이는 세 가지 콜백 함수를 가질 수 있다.
- 다음 엘리먼트를 받았을 때 처리하는 함수
- 에러를 받았을 때 처리하는 함수
- 데이터 스트림이 끝났을 때 실행하는 함수
콜드 옵저버블(cold observable): 구독자가 있는 경우에만 스트리밍 데이터를 만들기 시작.
핫 옵저버블(hot observable) 데이터를 받는 구독자가 없더라도 데이터를 스트리밍함.
subscribe(): 옵저버블 객체로부터 스트림을 구독한다.
debounceTime(): 스트림의 데이터가 발생하는 시점을 지연시킨다.
Form Control
Tracks the value and validation status of an individual form control.
It is one of the three fundamental building blocks of Angular forms, along with FormGroup and FormArray.
How to Use
When instantiating a FormControl, you can pass in an initial value as the first argument. Example:
const ctrl = new FormControl('some value');
console.log(ctrl.value); // 'some value'
switchMap()
'Development' 카테고리의 다른 글
게터(getters), 세터(setters), 메소드 정의 (0) | 2017.10.14 |
---|