값이 생성되고 방출되는 방법에 대한 비즈니스 로직은 옵저버블에 속합니다. 하지만 간단한 숫자 표시기를 원하든 서드파티의 진행률 상태 바 위젯을 사용하든 렌더링의 모든 세부 사항은 옵저버 안에서 호출자가 구현할 몫입니다.
Tip
RxJS의 시간 연산자로 이 작업을 수행할 수도 있습니다. 더 자세한 내용은 다음 장에서 다룹니다.
이 방법을 사용하면 프로그램의 여러 상태에 더 많이 반응할 수 있습니다. 2장의 이터레이터와 제너레이터에 관한 논의를 돌이켜보면 옵저버는 이 예제 코드와 유사하게 작동합니다. 주된 차이점은, 이터레이터는 옵저버블이 옵저버에 값을 전송하는 푸시 기반 특성과 반대되는 풀 기반 메커니즘을 사용한다는 것입니다. 이터레이터와 제너레이터는 소비 코드가 소비 속도를 제어합니다. 예를 들어 for
루프는 다른 곳이 아닌 이터레이터 또는 제너레이터에서 가져올 것을 제어(요청)합니다. 즉, next()
또는 yield
를 호출하여 새로운 데이터가 필요할 때마다 이터레이터의 소비자는 적절한 메서드를 호출하여 이터레이터의 상태를 업데이트합니다. 다음 그림은 피보나치 수열을 사용하는 또 다른 예를 보여줍니다.
▲ 그림 2-16 이터레이터의 풀 메커니즘