[iOS] ๋ฉ์ดํธ๋ฌ๋: ์ฝ๋๋ค์ดํฐ ํจํด ์ ์ฉ๊ธฐ
๋ฉ์ดํธ ๋ฌ๋ ์ฑ ๊ฐ๋ฐ ๊ณผ์ ์ ๊ณต์ ํ๋ ํฌ์คํธ์ ๋๋ค!
์ฌ๊ธฐ์ ์ ํฌ ํ๋ก์ ํธ๋ฅผ ๋ ์์ธํ ๋ณผ ์ ์์ด์!
๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค!
๊ณํ์ ์๋ ์ฝ๋๋ค์ดํฐ ํจํด์ด ๋ฑ์ฅํ ์ด์
์ ํฌ ํ์ ๊ธฐํ๋จ๊ณ์ ๊ฐ๋ฐ ์ด๊ธฐ์๋ ์ฝ๋๋ค์ดํฐ ํจํด์ ์ ํ ๊ณ ๋ คํ์ง ์์์ต๋๋ค. ์๋ํ๋ฉด ์ด๋ฏธ ํด๋ฆฐ ์ํคํ ์ฒ์ ์์ ํ ์๋ก์ด ์ง์์ธ RxSwift๋ฅผ ํ๋ก์ ํธ์ ๋์ ํ๋ ค๊ณ ํ๋ฉด์ ๋ง์ ์๋์ง๋ฅผ ์๋นํ๊ณ , ๊ผญ ํ์ํ์ง ์๋ค๋ฉด ์ฌ์ฉํ์ง ์์๋ ๋๋ค๋ ์๊ฐ์ด ์์๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ง๋ง ์ด๋ฐ ์๊ฐ์ ํ ํญ์ ๊ธฐ๋ฅ๋ค์ ๊ตฌํํ๋ฉด์ ์์ ํ ๋ฌ๋ผ์ง๊ฒ ๋์์ต๋๋ค.
์ด ํ๋ฉด๋ค์ ํจ๊ป ๋ฌ๋ฆฌ๋ ๋ชจ๋์์ ์ฌ์ฉ์๊ฐ ๋ฌ๋ฆฌ๊ธฐ๋ฅผ ์์ํ๊ธฐ๊น์ง ๊ฑฐ์ณ์ผ ํ๋ ํ๋ฉด์ ๋๋ค. ๋ง๊ฒ๋ ์ด 5๊ฐ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ฑฐ์น๋ฉด์ ๋ฌ๋ฆฌ๊ธฐ์ ๋ํ ์ค์ ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
๊ทธ ์ดํ์ ๋ฌ๋ฆฌ๊ธฐ๊ฐ ์์๋๋ฉด ์๋์ ๋ณด์ด๋ ๊ฒ์ฒ๋ผ ๊ฐ ๋ชจ๋์ ๋ฐ๋ผ ๊ฐ๊ฐ ๋ค๋ฅธ ์ด๋ํ๋ฉด๊ณผ ๊ฒฐ๊ณผ ํ๋ฉด์ ๋ณด์ฌ์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด 6๊ฐ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ํ ํญ์ ๋ ํฌํจ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ ์ฑ์์๋ ํ ํญ์ ์ด 11๊ฐ์ ๋ค๋ฅธ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ด ์ํฉ์ ๋ง๊ฒ ์ ํ๋์ด์ผ ํฉ๋๋ค. ์ด๋ฐ ์ํฉ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๊ฒ ์ง์ ํ๋ฉด ์ ํ์ ์ํค๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ 11๊ฐ์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ชจ๋ ์์ฑํด์ฃผ์ด์ผ ํฉ๋๋ค.
class ViewController {
buttonDidTap() {
let next = NextViewController()
next.viewModel = ViewModel(
usecase: UseCase()
repository: Repository()
)
self.navigationViewController.pushViewController(next)
}
}
์ด๋ ๊ฒ ๋๋ฉด ๊ฐ์ ๋ชฉ์ ์ ํ๋ฉด๋ค์ ์์ ํ๊ธฐ ์ํด์ ๋งค๋ฒ ๊ฐ ๋ทฐ ์ปจํธ๋กค๋ฌ ํ์ผ์ ์ด์ด ๊ด๋ฆฌํด์ฃผ์ด์ผ ํ๊ณ , ๋ง์ฝ ์ ์ฆ ์ผ์ด์ค๋ ๋ด๋ถ ์๋น์ค์ ํ์ ์ด ๋์ผํ๋ค๋ฉด ๋์ผํ ์ฝ๋๊ฐ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต๋ฉ๋๋ค.
์ด๋ฐ ๋ถํธํจ์ ํด๊ฒฐํ๊ณ , ๋์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ก๋ถํฐ ์์กด์ฑ ์ฃผ์ ์ด๋ผ๋ ์ถ๊ฐ์ ์ธ ์ญํ ์ ๋ถ๋ฆฌํด๋ด๊ธฐ ์ํด ์ฝ๋๋ค์ดํฐ ํจํด์ ์ ์ฉํ๊ฒ ๋์์ต๋๋ค.
์ฝ๋๋ค์ดํฐ ์ค๊ณํ๊ธฐ
์ฝ๋๋ค์ดํฐ๋ฅผ ์ค๊ณํ๊ธฐ ์ํด์๋ ๋จผ์ ์ฐ๋ฆฌ๊ฐ ์ด๋ค ๋จ์๋ก ํ๋ฉด๋ค์ ์ฝ๋๋ค์ดํฐ๋ก ๋ฌถ์ด์ผ ํ ์ง ๊ณ ๋ฏผํ๋ ๊ณผ์ ์ด ํ์ํ์ต๋๋ค.
๋ฉ์ดํธ ๋ฌ๋ ์ฑ์ ์ฌ์ฉ์๊ฐ ์ฑ์ ์ ์ํ๋ฉด ๋ก๊ทธ์ธ์ด ๋์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ํ ํ๋ฉด์ผ๋ก ์ด๋ํ๊ฑฐ๋, ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ ํ๋ฉด์ 4๊ฐ์ ํญ์ผ๋ก ์ด๋ฃจ์ด์ง ํญ ๋ฐ ์ปจํธ๋กค๋ฌ๊ฐ ๊ฐ์ฅ ๊ธฐ๋ณธ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ๋์ฃ .
https://github.com/boostcampwm-2021/iOS06-MateRunner/pull/63
ํ๋ก์ ํธ ๊นํ์ ์ฒ์์ผ๋ก ์ฝ๋๋ค์ดํฐ๋ฅผ ๋์ ํ๊ณ ์ฌ๋ ธ๋ PR์ ๊ธฐ๋ก์ด ๋จ์์๋๋ฐ์..
์ด๊ฒ ๋ญ์ง..? ใ ใ ใ ใ ใ ์ ํผ์์ ๋ณธ ํ์๋ค์ด ์ด๊ฑธ ์ด๋ป๊ฒ ์ดํดํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค์...
์๋ฌดํผ ์ฒ์ ์๋๋ ์ต์์์ AppCoordinator๋ฅผ ๋๊ณ ํญ ๋ฐ๋ฅผ ๋ชจ๋ ๊ด๋ฆฌํ๋ TabBarCoordinator๋ฅผ ๋ง๋ค๊ณ ๊ทธ ์๋์ ํธ๋ฆฌ ํํ๋ก ๊ฐ ํญ์ ๋ํ ์๋ ์ฝ๋๋ค์ดํฐ๋ฅผ ๋๋ ๋ฐฉ์์ ๋๋ค.
์ค์ ๊ตฌํ์ ์ฌ๋ฌ ๊นํ ๋ ํฌ๋ฅผ ๋ํผ๋ฐ์ค๋ก ์ผ์ ์๋์ ๊ฐ์ด ์ฝ๋๋ค์ดํฐ ํ๋กํ ์ฝ์ ์ ์ํ์ต๋๋ค.
finishDelegate๋ ์ด ์ฝ๋๋ค์ดํฐ๊ฐ ์์ ์ ๋ชจ๋ ๋ง์ณค์ ๋, ์ฆ ์ด ์ฝ๋๋ค์ดํฐ๋ฅผ ํตํด ๊ด๋ฆฌํ๊ณ ์ ํ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ๋ ์ด์ ์์ ๋ ๋ค๋ฅธ ์ฝ๋๋ค์ดํฐ์์ ๋ค๋ฅธ ์ฐ์์ ์ธ ์์ ์ ์ํํ๋๋ก ํ๊ธฐ ์ํด ๋ง๋ ๋ธ๋ ๊ฒ์ดํธ์ ๋๋ค. ์๋ฅผ ๋ค์ด์ ๋ก๊ทธ์ธ์ด ๋ชจ๋ ๋๋๋ฉด ํญ ๋ฐ๋ก ์ด๋ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ ์ผ ์ต์์ ์ฝ๋๋ค์ดํฐ์ธ AppCoordinator์ LoginCoordinator๋ฅผ ๋ธ๋ ๊ฒ์ดํธ๋ก ์ฐ๊ฒฐํด๋๋ฉด AppCoordinator๋ LoginCoordinator๊ฐ ์ข ๋ฃ๋์ ๋ ํญ ๋ฐ์ ๋ํ ์ฝ๋๋ค์ดํฐ๋ฅผ ์์ํ๋๋ก ์ ์ํ ์ ์์ต๋๋ค.
navigationController๋ ์ด ์ฝ๋๋ค์ดํฐ์์ ์ฌ์ฉํ ๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด ์ฝ๋๋ค์ดํฐ์์ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ์ด ๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ก ์ฝ์ ๋ฉ๋๋ค.
childCoordinators๋ Coordinator ์ธ์คํด์ค์ ๋ฐฐ์ด๋ก ์ด ์ฝ๋๋ค์ดํฐ์ ํ์์ ๋ค์ด๊ฐ ์ฝ๋๋ค์ดํฐ๋ค์ ๋ชฉ๋ก์ ์๋ฏธํฉ๋๋ค. AppCoordinator์ childCoordinators๋ [LoginCoordinator, TabBarCoordinator]๊ฐ ๋๊ฒ ์ฃ .
typeํ๋กํผํฐ๋ ๋์ค์ ํน์ ํ ์ฝ๋๋ค์ดํฐ๋ฅผ ์ฐพ์ ๋ ํค ๊ฐ์ ์ญํ ๋ก ์ฌ์ฉ์ด ๋๊ณ , start, finsh ๋ฉ์๋๋ ์ฝ๋๋ค์ดํฐ๊ฐ ์ฒ์ ์์ํ ๋์ ์ข ๋ฃ๋ ๋์ ๋์์ ์ ์ํฉ๋๋ค.
์ด์ ํ ํญ์์ ํ๋ฉด์ด ์ ํ๋๊ณ ์์กด์ฑ์ด ์ฃผ์ ๋๋ ๊ฒ์ ์ด๋ฐ ์์ผ๋ก ์งํ๋ฉ๋๋ค.
๊ฝค ๊ทธ๋ด๋ฏํ์ฃ ? ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ์ฒ์ ์๋ํ๋ ๋๋ก ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๋ ์ผ๋ง ํ๊ณ ์์กด์ฑ ์ฃผ์ ๊ณผ ํ๋ฉด์ ์ ํ์ ์ด์ ์ฝ๋๋ค์ดํฐ์ ์ญํ ์ด ๋์์ต๋๋ค.
์ ๊น, ์ฝ๋๋ค์ดํฐ๋ ๊ทธ๋ผ ๋ทฐ์ปจ์ ์์ด์ผ ๋ผ? ๋ทฐ ๋ชจ๋ธ์ ์์ด์ผ ๋ผ?
์ ํฌ ํ์ ๋ ๊ฐ์ง ์ด์ ๋๋ฌธ์ ์ฝ๋๋ค์ดํฐ๋ฅผ ๋ทฐ ๋ชจ๋ธ์ ์์นํ๋๋ก ํ์ต๋๋ค.
๋ทฐ ๋ชจ๋ธ์ด ํ๋ฉด์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ๋ชฐ๋ผ๋ ๊ด์ฐฎ์๊ฐ?
์ด๊ฒ ๋ง๋ ์๊ฐ์ธ์ง ํ์ ์ ์์ง๋ง ์ ํฌ๋ ๋ทฐ ๋ชจ๋ธ์๋ ํ๋ฉด์์ ๋ฐ์ํ๋ ๋ชจ๋ ์ด๋ฒคํธ๊ฐ ์ ๋ฌ๋์ด์ผ ํ๋ค๋ ์๊ฐ์ผ๋ก ๊ตฌํ์ ์งํํ์ต๋๋ค.
๋ทฐ ๋ชจ๋ธ๋ก ๊ตฌ์กฐ๋ฅผ ๋๋๋ ์ด์ ๊ฐ ๋ทฐ์์ ์ผ์ด๋๋ ์ผ์ ํ ์คํธํ ์ ์๊ฒ ํ๊ธฐ ์ํด์๋ผ๊ณ ์๊ฐํ๋๋ฐ ๋จ์ ํ ์คํธ๋ ์๋๋ฆฌ์ค ํ ์คํธ๋ฅผ ์งํํ ๋ ํ๋ฉด ์ ํ์ด ์ด๋ค ๊ฒฝ์ฐ์์ ํธ๋ฆฌ๊ฑฐ ๋๋์ง ํ ์คํธํ๋ ค๋ฉด ์ด๋ฒคํธ๊ฐ ๋ฌด์กฐ๊ฑด ๋ทฐ ๋ชจ๋ธ์๋ ํ๋ฒ ๊ฐ์ผ ํ๊ณ ๋ทฐ ๋ชจ๋ธ์์ ์ฝ๋๋ค์ดํฐ๋ฅผ ํธ์ถํด์ผ ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฐ๋จํ ์๋ก, ๋ฒํผ์ด ๋๋ ธ์ ๋ ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ์ ํ์ด ๋๋์ง๋ฅผ ํ ์คํธํ ์ ์๊ณ , ๋ทฐ ๋ชจ๋ธ์ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ธ ๋ค์ ๋ค์ ๋ทฐ ์ปจํธ๋กค๋ฌ์์ ์ฝ๋๋ค์ดํฐ๋ฅผ ํธ์ถํ๊ธฐ์๋ ๋ทฐ ๋ชจ๋ธ์์๋ ์๋ฌด ์ผ๋ ํ์ง ์์ ์ฑ๋ก ๋ทฐ ์ปจํธ๋กค๋ฌ์ ํจ์๋ง ํธ์ถํ๊ฒ ๋๋ ๊ฒฉ์ด๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค
๋ทฐ์ปจ์์ ์ ์ฆ ์ผ์ด์ค ๋ฐ์ดํฐ์ ์ ๊ทผํด๋ ๋๋ ๊ฑฐ์ผ?
RunningSetting์ ์ ์ฆ์ผ์ด์ค์ ๋๋ค๋ฉด, ๋ทฐ ์ปจํธ๋กค๋ฌ์์ ์ฝ๋๋ค์ดํฐ๋ฅผ ํธ์ถํ ๋ ๋ทฐ ๋ชจ๋ธ -> ์ ์ฆ ์ผ์ด์ค๊น์ง ๋ค์ด๊ฐ์ ๊ฐ์ ๊ฐ์ง๊ณ ๋์์ผ ํ๋๋ฐ ๋ ๋ฒ์ ๊ฑฐ์ณ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์ ์ฆ ์ผ์ด์ค๋ฅผ ๊ฐ์ ์ ์ผ๋ก๋ผ๋ ์ ๊ทผํ๋ ๊ฒ์ด ์ข๊ฒ ๋๊ปด์ง์ง๋ ์์์ต๋๋ค.
ํ๋ฉด ํ๋ฆ ๊ด๋ฆฌ
์ฝ๋๋ค์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ป์ ๋ค๋ฅธ ํฐ ์ด์ ์ด ๋ ์์์ต๋๋ค. ํ์ ์ฝ๋๋ค์ดํฐ๋ฅผ ํตํด ์ค์ ๋ก๋ ๊ฐ๋ณ์ ์ธ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ๋์ผํ ๋ชฉ์ ์ ํ๋ฆ์ผ๋ก ๋ ผ๋ฆฌ์ ์ธ ๋จ์๋ก ๋ถ๋ฆฌํ ์ ์๋ค๋ ์ ์ ๋๋ค.
๋ค์ ์ด ๊ทธ๋ฆผ์ผ๋ก ๋์๊ฐ๋ฉด, ์ฌ์ฉ์๊ฐ ๋ฌ๋ฆฌ๊ธฐ ์ ๋ณด๋ฅผ ์ค์ ํ๋ SettingViewController๋ค๊ณผ ๋ฌ๋ฆฌ๊ธฐ ํ๋ ๋์ค, ๊ทธ๋ฆฌ๊ณ ๋ฌ๋ฆฌ๊ธฐ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ๋ RunningViewController ๋ ํ๋ฆ์ผ๋ก ๋๋ ์ ์์ต๋๋ค. ํ์ง๋ง ์ง๊ธ์ HomeCoordinator ํ ์ฝ๋๋ค์ดํฐ๊ฐ ๋ชจ๋ ๋ ผ๋ฆฌ ํ๋ฆ์ ๋ด๋นํ๊ณ ์์ต๋๋ค.
์์์ ์ฝ๋๋ค์ดํฐ๋ฅผ ํธ๋ฆฌ๊ตฌ์กฐ๋ก ์ค๊ณํ๋ค๊ณ ๋ง์๋๋ ธ๋๋ฐ์, ๋ฐ๋ก ์ด๋๋ฅผ ์ํด์์ ๋๋ค!
์ง !
HomeCoordinator๋ฅผ ๋ถ๋ชจ ์ฝ๋๋ค์ดํฐ๋ก ๋๊ณ , ๋ฌ๋ฆฌ๊ธฐ ์ค์ ํ๋ฆ์ ๊ด๋ฆฌํ๋ SettingCoordinator์ ๋ฌ๋ฆฌ๊ธฐ ํ๋ฉด๊ณผ ๊ฒฐ๊ณผ ํ๋ฉด ํ๋ฆ์ ๊ด๋ฆฌํ๋ RunningCoordinator๋ก ๋ถ๋ฆฌํ๋ฉด ํ๋ฉด ์ ํ์ ๋ ผ๋ฆฌ์ ํ๋ฆ์ ์ ํฌ๊ฐ ์ํ๋ ๋๋ก ๋๋๊ณ ๊ด๋ฆฌํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ค์ ๋ก ๋ ์ฝ๋๋ค์ดํฐ์ ํ๋กํ ์ฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ๋กํ ์ฝ๋ง ๋ด๋ ์ด ์ฝ๋๋ค์ดํฐ๊ฐ ์ด๋ค ํ๋ฉด๋ค์ ์ฒ๋ฆฌํ๊ฒ ๋๋์ง ๋ฐ๋ก ์ ์ ์์ฃ !
ํ๋ฉด ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ
์ด์ ์ฝ๋๋ค์ดํฐ์ ๋ํ ์ ๋ฐ์ ์ ์ค๊ณ๋ ๋ง๋ฌด๋ฆฌ๊ฐ ๋์๋๋ฐ์, ํ ๊ฐ์ง ๋ ๊ณ ๋ฏผํ ๊ฑฐ๋ฆฌ๊ฐ ์์์ต๋๋ค.
์ด๋ ๊ฒ ๋ฌ๋ฆฌ๊ธฐ ์ ๋ณด๋ฅผ ์ค์ ํ๋ ํ๋ฉด๋ค์ ์ ํํ ๋๋ง๋ค ์ค์ ๋ ๋ฐ์ดํฐ ์ธ์คํด์ค๋ฅผ ๋ค์ ๋ทฐ ์ปจํธ๋กค๋ฌ์๊ฒ ๋๊ฒจ์ฃผ์ด์ผ ํ์ต๋๋ค.
์ ํฌ๋ ์ด๋ ๊ฒ ์ค์ ์ ๋ณด๋ฅผ ๋ชจ๋ธ๋งํ๊ณ ๋ชจ๋ธ ๋ถ๋ณ์ฑ์ ์งํค๊ธฐ ์ํด ์๋ก์ด ์ค์ ์ ๋ณด๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ์ด์ ๊ฐ๊ณผ ์๋ก์ด ๊ฐ์ด ํฉ์ณ์ง ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋๋ก ํ์ต๋๋ค.
๊ฒฐ๊ตญ ์ด ๋ฐ์ดํฐ๊ฐ ํ๋ฉด์ ๋๊ธธ ๋๋ง๋ค ๊ณ์ ์ด๋ํด์ผ ํ๊ณ , ํนํ SettingCoordinator์์ RunningCoordinator๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ฃผ๋ ๊ฒ ์ญ์๋ ํ์ํ์ต๋๋ค.
RuinningSetting ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋๊ธฐ๋ ๊ฒ์ ์ฝ๋๋ค์ดํฐ๊ฐ ํ๋ฉด ์ ํ์ ์ค๊ฐ๋ค๋ฆฌ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ค์ดํฐ์๊ฒ ๋ค์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ก์ ์ ํ์ ์์ฒญํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์ ๋ฌํ๋ ๊ฒ์ผ๋ก ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์์ต๋๋ค.
๋ฌธ์ ๋ SettingCoordinator -> RunningCoordinator์ ๋ฐ์ดํฐ ์ด๋์ธ๋ฐ์, ์ด ๋ฌธ์ ๋ Delegate๋ก ๋ถ๋ชจ ์ฝ๋๋ค์ดํฐ์ ์์ ์ฝ๋๋ค์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ผ๋ก ๋ ์ฝ๊ฒ ํด๊ฒฐ์ด ๊ฐ๋ฅํ์ต๋๋ค.
์ด๋ ๊ฒ ๋ชจ๋ ์ค์ ์ ๋ณด๊ฐ ์ธํ ๋๊ณ ๋ง์ง๋ง์ 3์ด ์นด์ดํธ ๋ค์ด ํ๋ฉด๊น์ง ์ข ๋ฃ๋๋ฉด, ์ฝ๋๋ค์ดํฐ๋ ์ค์ ์ด ๋ชจ๋ ๋๋ฌ๋ค๋ delegate ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ , ์ด ๋ฉ์๋๋ฅผ ์ค์ ๋ก ๊ตฌํํ๊ณ ์๋ HomeCoordinator๋ delegate ๋ฉ์๋ ํธ์ถ๊ณผ ํจ๊ป ์ ๋ฌ๋ RunningSetting ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ ํ ํ๋ฆ์ธ RunningCoordinator์ ์ ๋ฌํฉ๋๋ค.
RunningCoordinator๋ ์ ๋ฌ๋ฐ์ ๋ฌ๋ฆฌ๊ธฐ ์ค์ ์ ๋ณด๋ฅผ ๋ณด๊ณ ๊ฐ ๋ชจ๋์ ๋ง๋ ์ด๋ ์ค ํ๋ฉด์ผ๋ก ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์ ํ์ํต๋๋ค.
์ค์ ํ ์๊ณ ๋ฆฌ์ฆ - ์ฝ๋๋ค์ดํฐ ํธ๋ฆฌ ํ์ํ๊ธฐ
๋ง์ง๋ง์ผ๋ก ์์ ์ ์์ ์ฝ๋๋ค์ดํฐ๊ฐ ์๋ ๋ค๋ฅธ ์ฝ๋๋ค์ดํฐ์ ์ธ์คํด์ค๋ฅผ ์ฐพ์๋ด๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๊ณ ๋ง์น๊ฒ ์ต๋๋ค.
์๊น ์ฝ๋๋ค์ดํฐ ํ๋กํ ์ฝ์์ ์๊ฐํ์ง ์๊ณ ๋์ด๊ฐ๋ findCoordinator๋ผ๋ ๋ฉ์๋๊ฐ ์์๋๋ฐ์, ๊ฐ ์ฝ๋๋ค์ดํฐ๊ฐ ๊ฐ์ง๋ type ํ๋กํผํฐ๋ฅผ ์ด์ฉํด ์์ ์ฝ๋๋ค์ดํฐ๋ฅผ ์ฐพ์๋ผ ์ ์์ต๋๋ค.
๊ฐ ์ฝ๋๋ค์ดํฐ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ childCoordinators์ ์๋ ์ฝ๋๋ค์ดํฐ๋ค์ ์ํํ๋ฉด์ ๊ทธ ํ์ ์ด ์ง๊ธ ์ฐพ๊ณ ์ ํ๋ ํ์ ๊ณผ ์ผ์นํ๋ฉด ๊ณง๋ฐ๋ก ํด๋น ์ฝ๋๋ค์ดํฐ๋ฅผ ๋ฐํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋ง์ด ์ง ๋ดค๋ BFS๋ฅผ ๊ทธ๋๋ก ์ ์ฉํด๋ณด์๋๋ฐ์, swift์์๋ O(1)๋ก ์ฒซ ๋ฒ์งธ ๋ฐฐ์ด ์์๋ฅผ ๊บผ๋ด๋ ๊ฒ์ ๋ณด์ฅํ๋ ์ฐ์ฐ์ด ์์ง๋ง (์ ๊ฐ ๋ชจ๋ฅด๋ ๊ฒ์ด๋ผ๋ฉด ์๋ ค์ฃผ์ธ์!), ์ฝ๋๋ค์ดํฐ๊ฐ ๋ง์ง ์๊ธฐ ๋๋ฌธ์ ํฐ ์ค๋ฒํค๋๋ ์๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํด์ ๊ทธ๋๋ก ์ฌ์ฉํ์ต๋๋ค.
PS ํ ๋๋ง ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ค์ ๋ก ์ ์ฉํด๋ณด๋ ๋๋์ด ์๋ก์ ์ต๋๋ค..!
๋ง๋ฌด๋ฆฌ
์ด๋ ๊ฒํด์ ์ ํฌ ํ์ด ํ๋ก์ ํธ์ ์ฝ๋๋ค์ดํฐ ํจํด์ ์ ์ฉํ ๊ณผ์ ์ ๊ณ ์ ํด๋ณด์์ต๋๋ค. ์ฝ๋๋ค์ดํฐ ํจํด๋ ์ํคํ ์ฒ๋ ์์ง ๋ฏธ์ํ ๊ฐ๋ฐ์๋ค์ด ์งํํ ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ ๋ถ์กฑํ ์ ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์๋ฉด ๋ ๊ณต๋ถํ ๊ฑฐ๋ฆฌ๊ฐ ์๊ธธ ๊ฒ ๊ฐ์ต๋๋ค :)
์ ํฌ ํ๋ก์ ํธ๋ ์ฌ๊ธฐ์ ํ์ธํ์ค ์ ์์ต๋๋ค!