ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ณธ ํฌ์คํ ์ ๊ณฐํ๊น๋์ ๊ฐ์์์์ ๊ธฐ๋ฐ์ผ๋ก, ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
๋์ฑ ์์ธํ ๋ด์ฉ์, ๊ฐ์ ์์์ ์ง์ ์์ฒญํ์๋๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค!
Subject ๋?
์ด์ ํฌ์คํ ๋ง๋ฏธ์, Subeject๋ผ๋ ๊ฒ์ ์ ๊น ์๊ฐํ์์ต๋๋ค.
์ดํ ํ๋ก์ ํธ์์๋ Subject๋ฅผ ๋ค๋ฃจ๋ ๋ด์ฉ์ด ๋ง์ด ๋์์, ์ด Subject์ ๋ํด ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค.
Subject๋ฅผ ๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด, Observable์ ํ๋ฆ์ ๋ฒ์ด๋ ์ธ๋ถ์์๋, ๋ฐ์ดํฐ๋ฅผ ์ปจํธ๋กค ํ์ฌ ์๋ก์ด ๊ฐ์ ์ง์ด๋ฃ์ด์ฃผ๋ ๋ ์์ ๋๋ค.
ReactiveX ๊ณต์๋ฌธ์๋ฅผ ์ฐพ์๋ณด๋ฉด Subject์ ์ข ๋ฅ์๋ 4๊ฐ์ง๊ฐ ์์ต๋๋ค.
1) AsyncSubject
2) BehaviorSubject
3) PublishSubject
4) ReplaySubject
๊ฐ Subject๋ค์ ๋ํด, ๊ณต์๋ฌธ์์ ์๋ ๋ง๋ธ๊ทธ๋ฆผ์ ํตํด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. PublishSubject
๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ Subject์ธ ๋งํผ ๋งค์ฐ ๊ธฐ๋ณธ์ ์ธ ๋ ์์ธ๋ฐ,
์ธ๋ถ์์ ์ด PublishSubject๋ฅผ .subscribe()ํ๋ค๋ฉด ํด๋น ์์ ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋ณด๋ด์ฃผ๋ ๋ ์์ ๋๋ค.
2. BehaviorSubject
์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด, ์ด๊ธฐ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๊ฐ ์ธ๋ถ์์ BehaviorSubject๋ฅผ .subscribe()ํ๋ ์๊ฐ
์ด๊ธฐ๊ฐ๊ณผ ํจ๊ป subscribe์์ ์ดํ์ ๋ฐ์ดํฐ๋ค์ ์ ๋ฌํด์ค๋๋ค.
๋ํ, ์ค๊ฐ์ subscribeํ๋ ๊ฒฝ์ฐ์๋ ํด๋น์์ ๊ธฐ์ค, ๊ฐ์ฅ ์ต์ data๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ํ์ฌ ๊ฐ์ ์ ๋ฌํด์ค๋๋ค.
3. AsyncSubject
AsyncSubject๋, ๊ทธ๋ฆผ์์ ์ ์ ์๋ฏ์ด ์ธ๋ถ์์ .subscribe()๋ฅผ ํ๋๋ผ๋ ๊ฐ์ ๋ณด๋ด์ฃผ์ง ์๋ค๊ฐ,
Completed๋๋ ์๊ฐ์ ๊ฐ์ฅ ์ต๊ทผ๊ฐ์ .subscribe()ํ ๋ชจ๋ stream์ ๋ฟ๋ ค์ค๋ค.
4. ReplaySubject
ReplaySubject๋ ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง์ฑ๋ก ์ด๊ธฐํ๊ฐ ๋๋ค.
๋ํ, .subscribe()๊ฐ ๋ ๋ ๋ฒํผ์ ํฌ๊ธฐ๋งํผ ๊ฐ์ ๊ฐ์ง ์ฑ, ์๋ก์ด ๊ฐ์ ๋ฐ์์จ๋ค.