Lagacy๋ฅผ Combine ์ ํํ๋ฉด์ ๋ฐฐ์ ๋ Tip๋ค์ ์ ์ด๋ณธ๋ค. Notification Cetner์ ๊ฑธ์๋ Observer๋ฅผ Publisher๋ก ์ ํํ๋ ๊ฒ์ ๋ํ ๊ธ์ด๋ค.
publisher(for:object:)
iOS 13๋ถํฐ Notification Center์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ค. addObserver
ํ๋ ๊ฒ์ ์ด property๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝํ ์ ์๋ค. ๊ธฐ์กด์๋ VC๋ฅผ ๋์ด๊ฐ๋ ๊ฒฝ์ฐ์ removeObserver
๋ฅผ ํญ์ํด์คฌ์ด์ผ ํ๋๋ฐ, ์ด๋ ๊ฒ ํ ๊ฒฝ์ฐ ์ฝ๋๊ฐ ๋ณด๋ค ๊ฐ๊ฒฐํด์ง๊ณ ๋ก์ง์ ์ฝ๊ธฐ ์ฌ์์ง๋ค๋ ์ฅ์ ์ด ์๋ค.
Publisher ์ฌ์ฉํ๊ธฐ
๊ธฐ์กด์ ๊ฒฝ์ฐ ์์ ๊ฐ์ด ์ฌ์ฉํ์ ๊ฒ์ด๋ค. ์ฆ, ์ด๋๊ฐ์์ addObserver
๋ฅผ ํด์ฃผ๊ณ , removeObserver
๋ฅผ ํด์ฃผ์์ด์ผ ํ๋ค.
์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด, ํด๋น VC๊ฐ ํ ๋นํด์ ๋๋ ์๊ฐ self.cancellables
๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋ฉด์ subscriber๋ค์ด ๋ชจ๋ ์ ๊ฑฐ๋๋ค. ๊ทธ๋์ ์ถ๊ฐ์ ์ผ๋ก removeObserver
๋ฅผ ํด์ค ํ์๊ฐ ์๋ค.
Notification Combine ์ ํํ๊ธฐ
ํน์ ํ๋์ ๊ฐ์ฒด์์ ๋ค์ํ publisher๋ฅผ ๋ณด๋ด์ฃผ์ด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋ค์ํ ๊ณณ์์ ์์ฒญ์ด ๋ค์ด์ค๊ธฐ ๋๋ฌธ์ singleton์ผ๋ก ์ ์ํ๋ ํ๋จ์ด ์ณ์์ ๊ฒฝ์ฐ์ด๋ค. ์ด๋ฐ ๊ฒฝ์ฐ, ๊ฐ๊ฐ์ ํ๋ฉด์์ ์์ ๊ฐ์ด NotificationCenter.default.publisher
์ ๊ฐ์ด ๋ฑ๋กํด์ ์ฌ์ฉํ๋ค๋ฉด ์ค๋ณต๋ ์ฝ๋๋ ๋ง๊ณ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง ๊ฒ์ด๋ค.
์ด๋ฐ ๊ฒฝ์ฐ, singleton ๊ฐ์ฒด์ publisher๋ฅผ ์์ ๋ฌ์๋ฒ๋ ค์, ๋ค์ํ ํ๋ฉด์์ ์ง์ ์ ๊ทผํ์ฌ ์ฌ์ฉํ๋๋ก ํ๋ ๊ฒ์ด ์ข๊ฒ ๋ค. ํน์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ ๋ ์๊ธฐ์, ๋ณ๊ฒฝ๋ ๊ฐ์ ์ ๊ณตํ๋ publisher๋ฅผ ๋ง๋ ๋ค๊ณ ์๊ฐํด๋ณด์.
๊ธฐ์กด ๊ฐ์ ๊ฒฝ์ฐ์๋, ์ด๋ฐ์์ผ๋ก ํน์ ๊ฐ์ฒด์์ ๋ณด๋ธ ๋ฉ์์ง๋ฅผ Observer๋ฅผ ๋ฑ๋กํ์ฌ ๋ฐ์ ๋ค ์ฒ๋ฆฌํ๋ค๊ณ ์๊ฐํด๋ณด์. ์ฝ๋๋ ๋๊ฐ ์ง ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ๋ฐฐ์ธ๋งํ ์ ์ ๋๊ฐ์ด๋ค.
- Protocol์ ์ฌ์ฉํด์ interface๋ฅผ ๋ง๋ ๋ค์ ์ฒ๋ฆฌํ ์ ์๋ค.
eraseToAnyPublisher
๋ฅผ ํตํด์ ์ฌ์ฉํ๋ ์ชฝ์์๋ ์ด๋ค Publisher ํ์ ์ธ์ง ์์ง ๋ชปํ๊ฒ ํ ์ ์๋ค. ์ฆ, ์๋์ ์ผ๋ก ๋ง๋ค์ด๋ฒ๋ฆด ์ ์๋ค.
์ฝ๋๋ ๋ณ๊ฒ ์์ง๋ง, ๋ฐฐ์ธ์ ์ด ์๋ ์ฝ๋์ด๋ค.
์ค์ ์ฌ์ฉ์
๋ง๋ฌด๋ฆฌ
์์ง์ Combine์ ๋ํด์ ์ ๋๋ก ๊ณต๋ถํ์ง ๋ชปํด์ ์ ์์ง ๋ชปํ์ง๋ง, ๋น๋ถ๊ฐ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๊ธฐ์ค์ผ๋ก ์ ๋ฆฌํ๊ณ ์๋ค. ์ถํ Network, Error Handling, Operator๋ฑ์ ๋ํด ๊ณต๋ถํด์ ๊ธ์ ์์ฑํด์ผ ํ ๋ฏํ๋ค. ๋!