κ³°νκΉλ κ°μ [3κ΅μ] RxSwift νμ©λ²μ λνκΈ°μ ν΄λΉνλ λ΄μ©μ λλ€!
π‘ RxSwift - Observable vs Subject
Observable μ μ΄λ€ λ°μ΄ν°λ₯Ό λ΄λ³΄λ΄μΌν μ§ λ―Έλ¦¬ μ ν΄μ§ ννμ μ€νΈλ¦Όμ΄λ€. create νλ μμ λΆν° κ°μ΄ μ ν΄μ Έμκ³ , μ€κ°μ λ°μ΄ν° κ°μ λ³κ²½ν μ μλ€.
λ²νΌ μ‘°μμΌλ‘ λ°μ΄ν° κ°μ λ³κ²½ν΄μΌνλ λ±μ μν©μμλ Observable λμ Subject λ₯Ό μ΄μ©νλ©΄ λλ€. Subject λ Observable μΈλΆμμ λ°μ΄ν°λ₯Ό λ£μ΄μ€ μλ μκ³ , ꡬλ ν μλ μλ μλ°©ν₯μ±μ κ°μ§ νμ μ΄λ€!
Subject λ μΌλ° Observable μ²λΌ subscribe νμ¬ event λ₯Ό μ λ¬λ°μ μ μμκ³Ό λλΆμ΄, Subject μΈλΆμμ onNext, onCompleted, onError, onDisposed λ±μ ν΅ν΄ λ°μ΄ν°λ₯Ό μ λ¬νκ±°λ stream μ λμ μ μλ€!
π±μ 리νμλ©΄,
Rx μμ Subject λ Observable μ΄λ©΄μ Observer μΈ νμ μ΄λ€.
Observable μ΄κΈ° λλ¬Έμ, μ΄λ₯Ό ꡬλ νλ Observer μκ² event λ₯Ό μ λ¬ν μ μμΌλ©°
Observer μ΄κΈ° λλ¬Έμ, νλ μ΄μμ Observableμ ꡬλ ν μ μμΌλ©° event μ λν μ²λ¦¬λ₯Ό ν μ μλ€.
π Subject μ’ λ₯λ€ - Publish, Behavior, Async, Replay
Subject λ μ¬λ¬κ³³μμ subscribe ν μ μμΌλ©°, κ³°νκΉλ κ°μμ μνλ©΄ Publish, Behavior λ₯Ό κ°μ₯ λ§μ΄ μ¬μ©νλ€κ³ ν©λλ€.
1. Publish Subject (is known simply as a subject)
- PublishSubject λ subscribe μ΄νμ observable λ€μ΄ λ°©μΆν λ°μ΄ν°λ§ observer μκ² λ°©μΆνλ€.
- observer κ° subscribe ν μμ μ΄νμ μμ±λ λ°μ΄ν°λ§ μ λ¬λ°μ μ μλ€.
- λ§λΈ λ€μ΄μ΄κ·Έλ¨μ 보면, 첫λ²μ§Έ observer λ ꡬλ ν μμ μ΄ν λΉ¨κ°, μ΄λ‘, νλ λ°μ΄ν°λ₯Ό μ λΆ μ λ¬λ°μ§λ§, λλ²μ§Έ observer λ ꡬλ ν μμ μ΄νμ λ°©μΆλ νλ λ°μ΄ν°λ§ μ λ¬λ°λλ€.
Publish Subject λ¨μ !?
- subject κ° μμ±λλ μμ κ³Ό observer κ° subject λ₯Ό ꡬλ νλ μμ μ¬μ΄μ λ°°μΆλλ νλͺ©λ€μ μμ΄λ²λ¦΄ μ μλ€λ λ¨μ μ΄ μλ€.
- μμ λ¨μ μ ν΄κ²°νκΈ° μν΄ κ΅¬λ νλ μμ μ κΈ°λ³Έκ° or λ§μ§λ§κ°μ μ λ¬λ°λ Behavior Subject νΉμ λͺ¨λ λ°μ΄ν°λ₯Ό μ λ¬λ°μ μ μλ ReplaySubject λ₯Ό μ΄μ©ν μ μλ€.
2. Behavior Subject
- observer κ° BehaviorSubject λ₯Ό ꡬλ νλ©΄, κ°μ₯ μ΅κ·Όμ λ°μ΄ν° νΉμ (μ΅κ·Ό λ°μ΄ν°κ° μλ€λ©΄) κΈ°λ³Έ κ°μ λ°©μΆνλ€. κ·Έ μ΄νμ λμμ Publish Subject μ λμΌνλ€.
- Observer μ ꡬλ νλ μμ μ λ€λ₯΄μ§λ§ μ΄μ μ λ°©μΆλ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ νμκ° μμ λ, μ΄μ©νλ©΄ λ κ² κ°λ€.
- BehaviorSubject λ₯Ό μ΄μ©νλ©΄, PublishSubject μμ λ°μ΄ν°κ° λ°©μΆλκΈ° μ κΉμ§ μ무 κ°λ κ°μ§μ μλ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€!
- λ§λΈλ€μ΄μ΄κ·Έλ¨μ μ΄ν΄λ³΄λ©΄, 첫λ²μ§Έ observer μκ²λ λΆνμμ κΈ°λ³Έκ°μ΄ μ λ¬λκ³ λλ²μ§Έ observer μκ²λ κ°μ₯ μ΅κ·Όκ°μΈ μ΄λ‘μμ΄ μ λ¬λλ κ²μ νμΈν μ μλ€.
3. AsyncSubject
- AsyncSubject λ completed λλ μμ μ λ§μ§λ§ λ°μ΄ν° νλλ§ λ°©μΆνλ€. λ°μ΄ν°κ° μμ±λλλΌλ λ°λ‘ λ΄λ €μ£Όμ§ μλλ€.
- λ§μ½ subject κ° κ΅¬λ νλ observable μ΄ μ€λ₯λ‘ μΈν΄ μ’ λ£λ κ²½μ°, AsyncSubject λ μ무κ²λ λ°°μΆνμ§ μκ³ λ°μν μ€λ₯λ₯Ό κ·Έλλ‘ μ λ¬νλ€.
- λ§λΈ λ€μ΄μ΄κ·Έλ¨μμ | μΌλ‘ νμλ κ²μ observable μ completed μμ μ μλ―Ένλ€.
4. ReplaySubject
- ReplaySubject λ μλ‘κ² κ΅¬λ νλ observer μκ² κΈ°μ‘΄μ λ°©μΆλμλ λ°μ΄ν°λ€μ λ€μ μ λ¬νλ€. λ°μ΄ν° emit μ replay νλ€κ³ μκ°νλ©΄ μ΄ν΄κ° μ¬μΈλ― νλ€!
- μμ±μ bufferSize λ₯Ό μ§μ ν΄, ꡬλ μ μ λ¬ν λ°μ΄ν°μ κ°μλ₯Ό μ§μ ν μ μλ€.
- λ§λΈ λ€μ΄μ΄κ·Έλ¨μ 보면 첫λ²μ§Έ observer λ ꡬλ μ΄νμ λ°μ΄ν°κ° μμ±λμμΌλ―λ‘, λ°©μΆ μμ μ μ λ¬λ°λλ€. λλ²μ§Έ observer λ ꡬλ νλ μμ μ μ΄μ λ°©μΆλ λ°μ΄ν°λ₯Ό νλ²μ μ λ¬λ°κ³ , κ·Έ μ΄ν μλ‘μ΄ λ°μ΄ν°λ μ λ¬λ°λλ€.
5. Variable ?
- λͺλͺ μ°Έκ³ κΈμμλ Variable λ Subject μ μ’ λ₯λ‘ ν¨κ» μ 리λμ΄ μμμ§λ§, Reative λ¬Έμμ μμ΄ μ°Ύμλ³Έ κ²°κ³Ό
- RxSwift4.0 λΆν° variable μ deprecated λμκ³ , μ΄μ λμΌν κΈ°λ₯μ BehaviorRelay κ° μλ‘ λμλ€κ³ νλ€.
- μΆνμ Relay κ΄λ ¨νμ¬ μ 리ν λ μΆκ°νκ² μ΅λλ€!
ReactiveX - Subject
If you have a Subject and you want to pass it along to some other agent without exposing its Subscriber interface, you can mask it by calling its asObservable method, which will return the Subject as a pure Observable. See Also
reactivex.io
songda515/MVVM_RxSwift
MVVM ν¨ν΄κ³Ό RxSwift λ₯Ό νμ΅νκ³ , μ΄λ₯Ό μ μ©ν νλ‘μ νΈλ₯Ό κ°λ°νκΈ° μν μ€ν°λλͺ¨μμ λλ€. - songda515/MVVM_RxSwift
github.com