์๋ ํ์ธ์ Foma ์ ๋๋ค.
์ค๋์ RxSwift ์์ ์์ฃผ ํฐ ๋น์ค์ ์ฐจ์งํ๋ Subject์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค!!
๋ฐ๋ก ์์ํ ๊ฒ์~
Subject๋?
๊ณต์ ํํ์ด์ง์ ๋์์๋ ๋ด์ฉ์ ํด์ํ๋ฉด
"Subject๋ Observable๊ณผ Observable ์ญํ ์ ๋ชจ๋ ์ํํฉ๋๋ค. Observer์ด๊ธฐ ๋๋ฌธ์ ํ๋ ์ด์์ Observable์ ๊ตฌ๋ ํ ์ ์๊ณ , Observable์ด๊ธฐ ๋๋ฌธ์ ๊ด์ฐฐํ ํญ๋ชฉ์ ์ฌ๋ฐ์กํ์ฌ ํต๊ณผ ํ ์ ์์ผ๋ฉฐ ์ ํญ๋ชฉ์ ๋ด๋ณด๋ผ ์๋ ์์ต๋๋ค."
๋ผ๊ณ ๋์ด์๋๋ฐ์.
์ฝ๊ฒ ๋งํ๋ฉด ์ต์ ๋ฒ๋ธ๊ณผ ์ต์ ๋ฒ์ ์ญํ ๋ ๋ค ํ๋ค ๋ผ๊ณ ์ดํดํ์๋ฉด ๋ ๊ฑฐ ๊ฐ์ต๋๋ค!
๋จผ์ ์ต์ ๋ฒ๋ธ์ ๋ญ๊น์?
์ง๋ ์๊ฐ์ "์ต์ ๋ฒ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ๋ ํ๋ฆ์ด๋ค."๋ผ๊ณ ์ค๋ช ๋๋ ธ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ต์ ๋ฒ๋ ๋ฌด์์ผ๊น์?
๋น์ฐํ ํ๋ฆ(์ต์ ๋ฒ๋ธ)์์ ๋ฐฉ์ถํ ๋ฐ์ดํฐ๋ฅผ ๊ด์ฐฐํ๋ ๊ฒ์ด์ฃ !
๊ทธ๋ฐ๋ฐ ์๋ธ์ ํธ๋ ์ด ๋๊ฐ์ง ๊ฒ์ ๋ชจ๋ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ๊ธฐ๋ ํ๊ณ ๊ทธ ๋ฐฉ์ถํ ๋ฐ์ดํฐ๋ฅผ ๊ด์ฐฐํ ์๋ ์๋๊ฒ์ด์ฃ !
์ด๋ ๊ฒ ๋งํ๋ฉด ์ดํด๊ฐ ํ๋๋ ์์ ๋ก ์์๋ณผ๊ฒ์.
Example
Observable & Observer(Subscriber)
์ต์ ๋ฒ๋ธ์ ๋ค์๊ณผ ๊ฐ์ด onNext(๋ฐ์ดํฐ), onError,onCompleted ๋ฑ์ ๋ฐฉ์ถํ๋ ๋ ์์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋งจ ์๋ซ์ค์ subcriber๋ ๊ทธ ์ต์ ๋ฒ๋ธ์ ๊ตฌ๋ ํ์ฌ์ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ๊ฒ์ ๋ฐฉ์ถํ๋ ๊ฒ์ธ์ง ๊ด์ฐฐํ๋ ๋ ์์ด์ฃ !
Subject
ํ์ง๋ง ์๋ธ์ ํธ๋ ์๋์ ๊ฐ์ด ์๊ธฐ ์์ ์ ๊ตฌ๋ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ์ฌ ๊ด์ฐฐํ ์ ์์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ตฌ๋ ์ ํ ๋ค์๋ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ก ๋ฐฉ์ถํ๊ณ ๊ตฌ๋ ํ ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ด์ฐฐํ ์ ์๋ ๊ฒ์ด์ฃ !
์ด๋ฌํ ์๋ธ์ ํธ๋ 4๊ฐ์ง ์ข ๋ฅ๊ฐ ์์ต๋๋ค.
AsyncSubject
AsyncSubject๋ ์๋ ๋ง๋ธ๊ณผ ๊ฐ์ด ๋งจ ๋ง์ง๋ง์ ๋ฐ์ดํฐ๋ง ์ปดํ๋ฆฟ์ด ๋์๋ ๊ตฌ๋ ์์๊ฒ ์ ๋ฌํฉ๋๋ค.
์๋์ ๊ฐ์ด ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถ๋๋ ์ปดํ๋ฆฟ์ด ๋๊ธฐ์ ๊น์ง ์๋ฌด๊ฒ๋ ์ถ๋ ฅ๋์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณค comleted์ด ๋๋ ์๊ฐ
๊ฐ์ฅ ๋ง์ง๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. (์๋ฌ๊ฐ ๋ฐ์ํ์์์ ์๋ฌ๋ฅผ ๋ฐฉ์ถํฉ๋๋ค.)
PublishSubject
PublishSubject๋ AsyncSubject์ ๋ค๋ฅด๊ฒ ๋ฐ์ดํฐ๊ฐ ๋ฐฉ์ถ๋๋ฉด ๊ทธ ์ฆ์ ์ ๋ฌ๋ฉ๋๋ค.
ํ์ง๋ง ๊ตฌ๋ ํ๊ธฐ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ ๊ฒ์ ์ ๋ฌ๋์ง ์๊ณ ๊ตฌ๋ ์ดํ์ ๋ฐฉ์ถ๋ ๋ฐ์ดํฐ๋ง ์ ๋ฌ๋ฉ๋๋ค.
์๋์ ๊ฐ์ด Publish 1์ด ๊ตฌ๋ ํ๊ธฐ์ ์ ๋ฐฉ์ถ๋ฉ๋๋ค.
์ถ๋ ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ดํด๋ณด๋ฉด ๊ตฌ๋ ์ด์ ์ ๋ฐ์ดํฐ๋ ์ ๋ฌ๋์ง ์๊ณ ๊ตฌ๋ ์ดํ ๋ฐฉ์ถ๋ Publish2,Publish3๋ง ์ ๋ฌ๋๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ปดํ๋ฆฟ์ด๋ ์๋ฌ๊ฐ ๋ฐฉ์ถ๋๋ฉด ์ปดํ๋ฆฟ๊ณผ ์๋ฌ๋ฅผ ์ ๋ฌํ๊ณ ํ๋ฆ์ด ๋๋๊ฒ ๋ฉ๋๋ค.
BehaviorSubject
BehaviorSubject๋ PublishSubject์ ๋น์ทํ์ง๋ง ๋ค๋ฅธ ์ ์ ์ด๊ธฐ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค.
PublishSubject๋ ์๋ฌด๋ฐ ๋ฐ์ดํฐ๊ฐ ์์๋ ๊ตฌ๋ ํ๋ฉด ์๋ฌด๊ฒ๋ ์ ๋ฌ๋์ง ์์ต๋๋ค.
ํ์ง๋ง BehaviorSubject๋ ๊ตฌ๋ ์ด์ ์ ์๋ฌด๋ฐ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ์ด๊ธฐ๊ฐ์ผ๋ก ์ง์ ํด์ค ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋๊ฒ ๋ฉ๋๋ค.
๋ง์ฝ ๊ตฌ๋ ์ด์ ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ๋ฐฉ์ถ๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ ์ดํ์ ์ ๋ฌํ๊ฒ ๋ฉ๋๋ค.
์๋์ ๊ฐ์ด BehaviorSubject์ ์ด๊ธฐ๊ฐ์ผ๋ก Behavior 1์ ์ง์ ํด์ฃผ๊ณ ๊ตฌ๋ ํ๋ฉด ๊ทธ ์ฆ์ Behavior์ด ์ ๋ฌ๋๊ณ
๊ทธ ๋ค๋ก ๋ฐฉ์ถ๋ Behavior2 Behavior 3๊ฐ ์ ๋ฌ๋๊ฒ ๋ฉ๋๋ค.
ReplaySubject
๋ง์ง๋ง์ผ๋ก ReplaySubject๋ ์์ฑ์ ์ด๊ธฐ๊ฐ์ผ๋ก buffersize๋ผ๋ ๊ฒ์ ์ ํด์ฃผ์ด ๊ตฌ๋ ์ด์ ์ ๋ฐฉ์ถํ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด
๋์์๋ถํฐ ์ผ๋งํผ ๊ฐ์ ธ์ฌ๊ฒ์ธ์ง๋ฅผ ์ ํ๊ฒ ๋ฉ๋๋ค.
BehaviorSubject์ PublishSubject์ ๊ฐ์ด ๊ตฌ๋ ์ดํ ๋ฐฉ์ถ๋ ๋ฐ์ดํฐ๋ ๋ฐ๋ก ์ ๋ฌ๋๊ฒ ๋๊ณ ์ปดํ๋ฆฟ์ด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์๋
์ปดํ๋ฆฟ๊ณผ ์๋ฌ๊ฐ ์ ๋ฌ๋๊ณ ํ๋ฆ์ด ๋๋๊ฒ ๋ฉ๋๋ค.
์๋์ ๊ฐ์ด bufferSize๋ฅผ 2๋ก ์ฃผ๊ณ ๊ตฌ๋ ์ ์ Replay 1 Replay 2 Replay 3 ์ ๋ฐฉ์ถํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ ๊ตฌ๋ ์ ํ๊ฒ ๋๋ฉด ๊ตฌ๋ ์ด์ ์ ๋ฐฉ์ถ๋์๋ ๋ฐ์ดํฐ ์ค ๋์์๋ถํฐ 2๊ฐ์ง์ธ Replay2์ Replay 3์ด ์ ๋ฌ๋๊ณ
๊ทธ ๋ค๋ก ๋ฐฉ์ถ๋ ๋ฐ์ดํฐ๋ ๊ณง๋ฐ๋ก ์ ๋ฌ๋๊ฒ ๋ฉ๋๋ค.
์ค๋์ ์ด๋ ๊ฒ Subject์ ๊ฐ๋ ๊ณผ ์ด 4๊ฐ์ง์ Subject๊ฐ ์ด๋ป๊ฒ ์ฐ์ด๋์ง์ ๋ํด์ ์์๋ณด์๋๋ฐ์.
์์ง์ ์ ๋ ์ด๋ ๊ฒ ์ด๋ก ๋ง ๊ณต๋ถ๋ง ํ๊ณ ์ค์ ๋ก ์ ์ฉํด๋ณด์ง ๋ชปํ๋๋ฐ
๋ง์ฝ ์ ์ฉํ๊ฒ๋๋ฉด ์์๋ฅผ ๋ง๋ค์ด์ ํฌ์คํ ํ๋๋ก ํ๊ฒ ์ต๋๋ค!
๊ทธ๋ฆฌ๊ณ ๊ถ๊ธํ์ ๋ด์ฉ์ด ์๊ฑฐ๋ ํ๋ฆฐ ์ ์ด ์๋ค๋ฉด ์๋ ๋๊ธ ๋ฌ์์ฃผ์ธ์~~!
'๐ Language > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฐ์ด์์ ํน์ ๊ฐ์ ์ํ๋ ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ(Change Specific Values to Something in Array ) (0) | 2021.02.22 |
---|---|
[RxCocoa] Relay๋? (0) | 2021.02.03 |
[RxSwift] Operator๋? (0) | 2021.01.19 |
[RxSwift] Observable ๊ฐ๋จํ๊ฒ ์์๋ณด๊ธฐ (0) | 2020.12.29 |
[RxSwift] Disposable๊ณผ DisposeBag (0) | 2020.12.26 |
๋๊ธ