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