Observable

ReactiveX에서 **옵저버(Observer)**는 **옵저버블(Observable)**을 구독한다. 이후 옵저버는 옵저버블이 방출하는 하나 또는 연속된 항목에 반응한다. 이 패턴은 동시성 연산을 가능하게 한다. 왜냐하면 이 패턴은 옵저버블이 객체를 방출하는 것을 기다리면서 연산을 block하지 않는 대신에 옵저버블이 미래에 값을 방출했을 때 적절하게 반응할 준비를 하는 보초인 옵저버를 만들기 때문이다.

이 문서에서는 리액티브 패턴, 옵저버블, 옵저버 및 옵저버의 옵저버블을 구독하는 방법을 설명한다. 다른 페이지(Operators)에서는 다양한 옵저버블 연산자를 사용해 옵저버블을 함께 연결하고 동작을 변경하는 방법을 보여준다.

문서에서 “마블 다이어그램”을 활용한 내용 설명이 자주 보인다. 아래 그림을 통해 마블 다이어그램이 어떻게 옵저버블과 옵저버블의 전환을 표현하는지 알 수 있다.

Untitled


Background

코드를 살펴보다 보면 개발자들은 자신의 코드가 작성된 순서에 따라 실행되고 완료 되기를 기대한다는 사실을 쉽게 알 수 있다. 그러나 ReactiveX에서는 많은 명령이 동시에 병렬적으로 실행될 수 있고 그 결과는 나중에 옵저버에 의해 임의의 순서로 캡처된다. 메서드를 호출하기보다는 “옵저버블” 형식으로 데이터를 조회하고 변환하는 메커니즘을 정의한다. 이후 옵저버블에 옵저버를 구독시키면 이전에 정의된 메커니즘이 옵저버블의 방출이 준비될 때마다 방출을 포착하고 대응하기 위해 감시하는 옵저버와 함께 작동한다.

이 접근 방식의 장점은 서로 의존하지 않는 많은 작업이 있을 때 다음 작업을 시작하기 전에 각 작업이 완료될 때까지 기다리지 않고 동시에 모두 시작할 수 있다는 것이다. 이를 통해 전체 작업 묶음을 수행하는데에는 묶음 안의 가장 긴 작업의 시간 만큼이 소요되게 된다.

이 비동기 프로그래밍 및 디자인 모델을 설명하는 데 사용되는 많은 용어가 있다. 이 문서에서는 다음 용어를 사용할 것이다.

**옵저버**는 **옵저버블**을 **구독**한다

옵저버블은 옵저버의 메서드를 호출하여 항목을 방출하거나 옵저버에게 알림을 보낸다.

다른 문서 및 기타 컨텍스트에서 우리가 “옵저버(observer)”라고 부르는 것은 때때로 “subscriber”, “watcher” 및 “reactor”라고 한다. 일반적으로 이 모델을 “리액터 패턴”이라고 한다.