본문 바로가기
안드로이드/Rx

안드로이드 RxJava : Subject, PublicshSubject, BehabiorSubject

by 김어찐 2022. 10. 27.
728x90

Subject

RxJava에서 Subject 클래스는 구독하고 있는 관찰자(Observer)에게 새로운 값을 전달 할 때 사용하는 클래스다.

따로 Observable로 새로운 값을 만들 필요 없이 Subject 객체에 내장된 onNext 함수로 새로운 값을 옵저버에게 전달할 수 있기 때문에 짧은 코드로도 reactivi하게 구한하는 것이 가능하다.

class Person {
    var publishName: PublishSubject<String>
            = PublishSubject.create()
}

val person = Person()
person.publishName.subscribe {
    Log.d(TAG, "publishName: " + it)
}
person.publishName.onNext("selfish")
person.publishName.onNext("developer")

 

PublishSubject vs BehaviorSubject

class Person {
    var behaviorName: BehaviorSubject<String>
            = BehaviorSubject.create()
    var publishName: PublishSubject<String>
            = PublishSubject.create()

    fun nextName(name: String) {
        behaviorName.onNext(name)
        publishName.onNext(name)
    }
}

person.nextName("selfish")
person.publishName.subscribe {
    Log.d(TAG, "publishName: " + it)
}
person.behaviorName.subscribe {
    Log.d(TAG, "behaviorName: " + it)
}
person.nextName("developer")

결과

 

PublishSubject

구독 이후에 갱신된 값에 대해서만 값만 받는다

 

 

BehaviorSubject

구독하는 시점의 가장 최근에 갱신된 값을 받는다.

728x90