- Published on
ReactiveX) Subject
- Author
- Name
- yceffort
subject๋ ์ต์ ๋ฒ๋ observable์ฒ๋ฌ ํ๋ํ๋ ์ผ๋ถ ReactiveX๊ตฌํ์ฒด์์๋ง ์ฌ์ฉ๊ฐ๋ฅํ ์ผ์ข ์ ํ๋ก์๋ค. subject๋ ์ต์ ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ํ๋์ด์์ observable์ ๊ตฌ๋ ํ ์ ์์ผ๋ฉฐ, ๋์์ observable ์ด๊ธฐ๋ ํ๊ธฐ ๋๋ฌธ์ ํญ๋ชฉ์ ํ๋ํ๋ ๊ฑฐ์น๋ฉด์ ๋ค์ pushํ๊ณ ์๋ก์ด ํญ๋ชฉ์ pushํ ์ ์๋ค.
์ด 4์ข ๋ฅ์ subject๊ฐ ์๋ค.
AsyncSubject
Observable์ด ๋ง์ง๋ง์ผ๋ก pushํ ๊ฐ๋ง push ํ๊ณ , ์ Observable์ ๋์์ด ๋ค ๋๋๋ฉด ๋์ํ๋ค. ์๋ฌด๊ฐ๋ push๋์ง ์์ผ๋ฉด, ์ด subject ์ญ์ ๋ฐฐ์ถํ์ง ์๋๋ค. ๋ํ ๋งจ ๋ง์ง๋ง ๊ฐ ๋ฐ๋ก ๋ค์ ์ค๋ ์ต์ ๋ฒ์๋ ๊ฐ์ ์ ๋ฌํ๋๋ฐ, ๋ง์ฝ ์ค๋ฅ์ ์ํด ์ข ๋ฅ๋ ๊ฒฝ์ฐ ์ด ์ค๋ฅ๋ฅผ ๊ทธ๋ฅ ์ ๋ฌํ๋ค.
BehaviorSubject
์ต์ ๋ฒ๊ฐ BehaviorSubject๋ฅผ ๊ตฌ๋
ํ๋ฉด, ์ต์ ๋ฒ๋ Observable ์ด ๊ฐ์ฅ ์ต๊ทผ์ ๋ฐํํ ํญ๋ชฉ (๋๋ ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๋งจ์ฒ์ ๊ฐ์ด๋ ๊ธฐ๋ณธ๊ฐ) ์ pushํ๋ฉฐ, ์ดํ Observable ์ด pushํ ๊ฐ์ pushํ๋ค.
PublishSubject
Subscribe ์ดํ์ pushํ ํญ๋ชฉ์ ๋ํด์ ๋ชจ๋ Observable์๊ฒ ๋ฐฐ์ถํ๋ค. ํ์ง๋ง ์ด ๋๋ฌธ์ subject๊ฐ ์์ฑ๋๋ ์์ ๊ณผ ๊ตฌ๋
ํ๋ ์์ ์ฌ์ด์ ๋น ๊ณต๊ฐ์ด ์๊ธด๋ค๋ ๋จ์ ์ด ์๋ค. ๋ฐ๋ผ์ ๋ชจ๋ pushํ๋ ๋ชจ๋ ํญ๋ชฉ์ ๋ฐ๊ธฐ ์ํด์๋ cold observable์ ์์ฑํ๊ฑฐ๋, ์๋์ subject๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
RelaySubject
PublishSubject ์ ๋ค๋ฅด๊ฒ, ๊ตฌ๋
ํ ์์ ์ ์๊ด์์ด Observable์ด pushํ ๋ชจ๋ ํญ๋ชฉ์ ๋ฐ๋๋ค. ๋ค๋ง ์ฌ์๋ฒํผ์ ํฌ๊ธฐ๊ฐ ํน์ ์ด์์ผ๋ก ์ฆ๊ฐํ ๊ฒฝ์ฐ์๋, ์ฒ์ ๋ฐฐ์ถํ ์ง์ ํ ์๊ฐ์ด ๊ฒฝ๊ณผํ๋ฉด ์ค๋๋ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ค. ๋ํ onNext์ฌ์ฉ์ ์ฃผ์ํด์ผํ๋ค. (์์์ ๋ชจํธํจ์ด ์๊ธฐ ๋๋ฌธ)