본문

[2018.03.17] 37. RxJava Subject 개념과 종류

도입

이번 포스팅에서는 RxJava의 Subject의 개념과 종류에 대해 공부할 예정이다.



개념

(출처 - http://reactivex.io/documentation/subject.html)

 Subject는 설명과 같이 Observable과 Observer의 역할을 모두한다.

 즉, 자신이 데이터를 발행하고 데이터를 처리 할 수 있다는 것이다.



사용 이유

Hot Observable을 Cold Observable로 변경 가능(아직 와닿지는 않는다.)

Hot Observable을 활용하기 위함이다. 아래 실습을 통해 알아 볼 예정이다.



종류와 실습

Subject는 총 4가지의 종류가 있다.


1. AsyncSubject

- 개념

(출처 - http://reactivex.io/documentation/subject.html)

마블 다이어그램을 확인해보면 AsyncSubject는 구독자에게 onComplete() 함수가 호출되면 마지막 값만 Push한다.


- 실습

1
2
3
4
5
6
7
8
9
10
11
12
13
fun AsyncSubj() {
    val subject = AsyncSubject.create<String>()
 
    subject.onNext("1")
    subject.onNext("2")
    subject.subscribe { item -> Log.e("heepie""[Async]Subscriber #1 $item") }
 
    subject.onNext("3")
    subject.subscribe { item -> Log.e("heepie""[Async]Subscriber #2 $item") }
    subject.onNext("4")
 
    subject.onComplete()
}

cs


2. BehaviorSubject

- 개념

(출처 - http://reactivex.io/documentation/subject.html)

마블 다이어그램을 확인해보면 BehaviorSubject는 구독자에게 구독 직전의 값부터 Push 한다. 처음부어 구독하는 구독자에게는 Default Value부터 Push 한다.


- 실습

1
2
3
4
5
6
7
8
9
10
11
12
13
fun BehavSubj() {
    val subject = BehaviorSubject.createDefault("Default")
 
    subject.onNext("1")
    subject.onNext("2")
    subject.subscribe { item -> Log.e("heepie""[Behav]Subscriber #1 $item") }
 
    subject.onNext("3")
    subject.subscribe { item -> Log.e("heepie""[Behav]Subscriber #2 $item") }
    subject.onNext("4")
 
    subject.onComplete()
}
cs


3. PublishSuject

- 개념

(출처 - http://reactivex.io/documentation/subject.html)

마블 다이어그램을 확인해보면 PublishSubject는 구독자에게 구독 이후의 값들을 Push 한다.


- 실습

1
2
3
4
5
6
7
8
9
10
11
12
13
fun PubshSubj() {
    val subject = PublishSubject.create<String>()
 
    subject.onNext("1")
    subject.onNext("2")
    subject.subscribe { item -> Log.e("heepie""[Pubsh]Subscriber #1 $item") }
 
    subject.onNext("3")
    subject.subscribe { item -> Log.e("heepie""[Pubsh]Subscriber #2 $item") }
    subject.onNext("4")
 
    subject.onComplete()
}
cs


4. ReplaySubject 

- 개념

(출처 - http://reactivex.io/documentation/subject.html)

마블 다이어그램을 확인해보면 ReplaySubject는 구독자에게 구독 이전부터 발행한 모든 값을 Push 한다.


- 실습

1
2
3
4
5
6
7
8
9
10
11
12
13
fun ReplySubj() {
    val subject = ReplaySubject.create<String>()
 
    subject.onNext("1")
    subject.onNext("2")
    subject.subscribe { item -> Log.e("heepie""[Reply]Subscriber #1 $item") }
 
    subject.onNext("3")
    subject.subscribe { item -> Log.e("heepie""[Reply]Subscriber #2 $item") }
    subject.onNext("4")
 
    subject.onComplete()
}
cs



#reactive #subject #rxjava

공유

댓글