본문 바로가기

프로그래밍 기초/기초문법

Observable, Observer, Subject

* 영어표기가 디폴트, 이하 한글표기

* Angular 기준


https://reactivex.io/documentation/ko/observable.html

 

1. Observable

- 어떤 데이터를 Observer 가 처리할 수 있도록 포장하는 작업, 하나의 클래스

- 하나, 하나 이상의 연속된 항목... 추가적으로 데이터를 변형하거나 추가도 가능

 

2. Observer (핵심)

- 관찰할 수 있는 형태로 전달받은 데이터를 처리하는 역할. Observable 를 읽기 위해 Subscribe(구독) 가 필요.

- Observable 이 배출하는 하나- 하나 이상의 연속된 항목에 반응함

- 객체를 끝까지 배출할 때 까지 기다릴 필요없다. ~ 원하는 시점에서 작업가능

- 호출의 개념보다, Observable 안의 데이터를 조회 - 변환하는 매커니즘을 정의

- Observable 이 이벤트를 발생시키면 옵저버가 그 순간을 감지 및 준비된 연산을 실행

 

2-1). Subscribe

 

3. Operator 

- 연산자, 형식을 변환 - 수정하는 번역기 역할

 

1(사운드) - 3(스피커) - 2(청자)

- 1번의 다듬어지지 않은 사운드를 mp3 등의 파일로 변환하여, 2번의 스피커를 통해, 3번의 청자에게 전달

 


그러면 Subject 는 뭐지?

- 일종의 옵저버, 동시에 Observable

- 그래서 하나의 Observable 을 구독할 수 있으며, 항목 하나하나를 거치며 재배출 - 관찰 - 새 항목을 동시에 방출 가능

 

!! Cold 와 Hot

1). Cold : 구독 전까지 데이터 방출 X, (웹 요청, DB쿼리, 파일 읽기 등)

2). Hot : 구독 여부 상관 X, 데이터 방출 자유 (마우스 이벤트, 키보드 이벤트, 시스템 이벤트 등)

 

- Subject 는 무려, Cold 를 Hot 으로 만들어준다!!

 


Subject 가 좋은건 알겠는데. Subscribe(구독) 한 시점부터 사용하는 방식이 다양하더라

 

1. Async Subject

- Observable 에서 발행한 가장 최근값이 출력됨.

- 완료되기 전 마지막 데이터만 남기고, 이전 데이터는 무시

 

2. Behavior Subject

- 기본값이 존재, 설정 가능함

- 가장 최근값이 출력됨

- 최근값이 없으면 기본값이 출력되는데, 새로 데이터가 들어오면 새로 들어온 것으로 갱신!

 

3. Publish Subject

- 기본값 X, 특별한 옵션 X

- 구독한 시점의 데이터를 받음

 

4. Replay Subject

- 구독한 시점 이전의 모든 데이터가 출력됨

- 처음 값부터 모두 누적되기 때문에 메모리 누수 발생 가능성이 있음

 

5. Connectable Subject 

- Connect 메서드 호출이 있어야 사용됨.

- 호출 전까지 출력되지 않음. 데이터는 존재 하지만...

 

 


 

추가로 callback 공부 더 할것.

'프로그래밍 기초 > 기초문법' 카테고리의 다른 글

객체지향_2  (0) 2022.11.04
undefined, null  (1) 2022.09.30
Context (공부중)  (0) 2022.09.27
Callback, =>  (1) 2022.09.15
Push, Pop, Unshift, Shif  (0) 2022.09.15