ReactiveX) Subject


subject는 옵저버나 observable처러 행동하는 일부 ReactiveX구현체에서만 사용가능한 일종의 프록시다. subject는 옵저버이기 때문에 하나이상의 observable을 구독할 수 있으며, 동시에 observable 이기도 하기 때문에 항목을 하나하나 거치면서 다시 push하고 새로운 항목을 push할 수 있다.

총 4종류의 subject가 있다.

AsyncSubject

Observable이 마지막으로 push한 값만 push 하고, 원 Observable의 동작이 다 끝나면 동작한다. 아무값도 push되지 않으면, 이 subject 역시 배출하지 않는다. 또한 맨 마지막 값 바로 뒤에 오는 옵저버에도 값을 전달하는데, 만약 오류에 의해 종류될 경우 이 오류를 그냥 전달한다.

BehaviorSubject

옵저버가 BehaviorSubject를 구독하면, 옵저버는 Observable 이 가장 최근에 발행한 항목 (또는 값이 없을 경우 맨처음 값이나 기본값) 을 push하며, 이후 Observable 이 push한 값을 push한다.

PublishSubject

Subscribe 이후에 push한 항목에 대해서 모두 Observable에게 배출한다. 하지만 이 때문에 subject가 생성되는 시점과 구독하는 시점사이에 빈 공간이 생긴다는 단점이 있다. 따라서 모든 push하는 모든 항목을 받기 위해서는 cold observable을 생성하거나, 아래의 subject를 사용해야 한다.

RelaySubject

PublishSubject 와 다르게, 구독한 시점에 상관없이 Observable이 push한 모든 항목을 받는다. 다만 재생버퍼의 크기가 특정이상으로 증가할 경우에는, 처음 배출후 지정한 시간이 경과하면 오래된 항목을 제거한다. 또한 onNext사용을 주의해야한다. (순서의 모호함이 있기 때문)

Related Posts

Computer Vision 01) - Image Representation

Deep Learning 03) - How do neural networks work/learn?

Deep Learning 02) - Activation Function

Deep Learning 01) - Neuron

Pytorch 09) - Transfer Learning

Pytorch 08) - CIFAR 10 학습

Pytorch 07) - Convolutional Neural Network (2)

Pytorch 06) - Convolutional Neural Network (1)

Pytorch 05) - Image Recognition

Pytorch 04) - Deep Nueral Network