๐ŸŽ ์•„์ด-์˜ค-์—์Šค/๐Ÿ“ฑ iOS ๊ฐœ๋ฐœ

[iOS] ๋ฉ”์ดํŠธ๋Ÿฌ๋„ˆ: ์ฝ”๋””๋„ค์ดํ„ฐ ํŒจํ„ด ์ ์šฉ๊ธฐ

๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด 2021. 12. 3. 15:33

๋ฉ”์ดํŠธ ๋Ÿฌ๋„ˆ ์•ฑ ๊ฐœ๋ฐœ ๊ณผ์ •์„ ๊ณต์œ ํ•˜๋Š” ํฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค!

 

GitHub - boostcampwm-2021/iOS06-MateRunner: ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ

ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ. Contribute to boostcampwm-2021/iOS06-MateRunner development by creating an account on GitHub.

github.com

์—ฌ๊ธฐ์„œ ์ €ํฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋” ์ž์„ธํžˆ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”!

 

๊ทธ๋Ÿผ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

๊ณ„ํš์— ์—†๋˜ ์ฝ”๋””๋„ค์ดํ„ฐ ํŒจํ„ด์ด ๋“ฑ์žฅํ•œ ์ด์œ 

์ €ํฌ ํŒ€์€ ๊ธฐํš๋‹จ๊ณ„์™€ ๊ฐœ๋ฐœ ์ดˆ๊ธฐ์—๋Š” ์ฝ”๋””๋„ค์ดํ„ฐ ํŒจํ„ด์„ ์ „ํ˜€ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๋ฏธ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์™€ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์ง€์‹์ธ 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

 

์•ฑ, ํƒญ๋ฐ” ์ฝ”๋””๋„ค์ดํ„ฐ ๊ตฌํ˜„ by jeonyeohun · Pull Request #63 · boostcampwm-2021/iOS06-MateRunner

๐Ÿ“• Issue Number Close #56 ๐Ÿ“™ ์ž‘์—… ๋‚ด์—ญ ๊ตฌํ˜„ ๋‚ด์šฉ ๋ฐ ์ž‘์—… ํ–ˆ๋˜ ๋‚ด์—ญ AppCoordinator ๊ตฌํ˜„ TabBarCoordinator ๊ตฌํ˜„ HomeCoordinator ๊ตฌํ˜„ ๐Ÿ“˜ ์ž‘์—… ์œ ํ˜• ์‹ ๊ทœ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฆฌํŽ™ํ† ๋ง ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ ๐Ÿ“‹ ์ฒดํฌ

github.com

ํ”„๋กœ์ ํŠธ ๊นƒํ—™์— ์ฒ˜์Œ์œผ๋กœ ์ฝ”๋””๋„ค์ดํ„ฐ๋ฅผ ๋„์ž…ํ•˜๊ณ  ์˜ฌ๋ ธ๋˜ 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 ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ–ˆ๋˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹ค์ œ๋กœ ์ ์šฉํ•ด๋ณด๋‹ˆ ๋Š๋‚Œ์ด ์ƒˆ๋กœ์› ์Šต๋‹ˆ๋‹ค..!

 

๋งˆ๋ฌด๋ฆฌ

์ด๋ ‡๊ฒŒํ•ด์„œ ์ €ํฌ ํŒ€์ด ํ”„๋กœ์ ํŠธ์— ์ฝ”๋””๋„ค์ดํ„ฐ ํŒจํ„ด์„ ์ ์šฉํ•œ ๊ณผ์ •์„ ๊ณ ์œ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ฝ”๋””๋„ค์ดํ„ฐ ํŒจํ„ด๋„ ์•„ํ‚คํ…์ฒ˜๋„ ์•„์ง ๋ฏธ์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ง„ํ–‰ํ•œ ํ”„๋กœ์ ํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์กฑํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๋” ๊ณต๋ถ€ํ•  ๊ฑฐ๋ฆฌ๊ฐ€ ์ƒ๊ธธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค :)

 

์ €ํฌ ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๊ธฐ์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

GitHub - boostcampwm-2021/iOS06-MateRunner: ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ

ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ. Contribute to boostcampwm-2021/iOS06-MateRunner development by creating an account on GitHub.

github.com