κ³°νκΉλ κ°μ [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 κ΄λ ¨νμ¬ μ 리ν λ μΆκ°νκ² μ΅λλ€!