๐ฅ ์ธ์ฌ๋ง
์๋ ํ์ธ์, ํ๋ผ์ ๋๋ค ใฐ ๐ ๋ค์ ์นดํ ๊ณ ๋ฆฌ์์๋ ๋ชจ๋ฅด๋ ๊ฐ๋ ์ด๋ ํค์๋, ๋ฌธ๋ฒ ๋ฑ ๋ค์ํ ๋ด์ฉ์ ์ ๋ฆฌํฉ๋๋ค. ๋ค์ ๋ด์ฉ์ ์ ์ ์ธ์คํ ๊ฐ๋ฐ ๋ก๊ทธ ๊ณ์ (@taekki.dev)์๋ ์ฌ๋ผ๊ฐ๋ ๋ง์ ๊ด์ฌ ๋ถํ๋๋ ค์ :) ๊ฐ๋ ์ ๋น๊ณต๊ฐ์ ๋ฉ๊ฟ ์ ์๋ ๊ทธ๋ ๊น์ง ํ์ดํ ํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ผ ์ค๋ ํฌ์คํ ์์ํด๋ณด๊ฒ ์ต๋๋ค. ๐
๐ฌ ๋ค์ด๊ฐ๋ฉฐ
UIWindow๋ฅผ ์ฒ์ ๋ง์ฃผํ๊ฑฐ๋, ๊ฐ์ฅ ๋ง์ด ๋ณด๋ ๊ณณ์ด ์ด์ฉ๋ฉด SceneDelegate.swift ๋ AppDelegate.swift ์ผ์ง๋ ๋ชจ๋ฆ ๋๋ค. ํญ์ ๊ฐ๋ณ๊ฒ ์ง๋์น๊ธฐ๋ง ํ๋ UIWindow๊ฐ ๋ฌด์์ธ์ง ์ด๋ฒ์ ์์๋ณด๊ธฐ๋ก ํ์ต๋๋ค. ์ด๋ฒ ๊ธ์ Apple ๊ณต์๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ๋ฐํ์ผ๋ก ๊ตฌ์ฑํ์ต๋๋ค.
๐ฑ UIWindow์ ํ์
๐ ํ์ (Type) - ํด๋์ค
ํ์ ์ ํด๋์ค(Class)๋ค์ :-)
๐ฑ UIWindow์ ์ ์
๐ ์ ์(Definition)
The backdrop for your app's user interface and the object that dispatches events to your views.
1. ์ฑ UI์ ๋ฐฐ๊ฒฝ(backdrop)
2. ๋ทฐ์ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ด๋(dispatch) ๊ฐ์ฒด
UIWindow๋ ํ ๋ง๋๋ก ๋ทฐ๋ฅผ ๋ด๋ ์์, ์ปจํ ์ด๋(๐ฆ)๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ ๊ฒ ๊ฐ์ต๋๋ค.
๐ฑ UIWindow์ ์ ์ธ
๐ ์ ์ธ(Declaration)
@MainActor class UIWindow: UIView
1. MainActor : ๋ฉ์ธ ์ค๋ ๋์์ ๋์์ ๋ณด์ฅํ๋ ์กํฐ
2. UIView๊ฐ UIWindow์ ๋ถ๋ชจ โจ
Actor์ ๊ฐ๋ ์ ์กฐ๋ง๊ฐ ๋ค๋ฅธ ๊ธ์ ์ ์ด๋ณด๋ ค๊ณ ํฉ๋๋ค. ์์ง Xcode๊ฐ ์ ๋ฐ์ดํธ๊ฐ ์๋ผ์ ์ฝ๋๋ฅผ ํ ์คํธํด๋ณด์ง ๋ชปํ๊ณ ์๋ค์.. ์ฌ๊ธฐ์๋ ๊ฐ๋จํ๊ฒ MainActor๋ผ๋ ๊ฒ์ด ๋ฉ์ธ ์ค๋ ๋์์ ๋์์ ๋ณด์ฅํ ์ ์๋๋ก ๋์์ฃผ๋ ์น๊ตฌ๋ผ๊ณ ๋ง ์ดํดํ๋ฉด ๋ ๊ฒ ๊ฐ์์!
๊ทธ๋ฆฌ๊ณ ๋ ํ๋ ์ค์ํ ๊ฒ์ด UIView๊ฐ UIWindow์ ์ํผํด๋์ค ๋ผ๋ ๊ฒ์ ๋๋ค. ์๊ณ ๊ณ์ จ๋์..? ์ ํํ๊ฒ ๊ธฐ์ตํ๊ณ ๋์ด๊ฐ๋๋ก ํฉ์๋ค~
๐ฑ UIWindow์ ํน์ง
๊ทธ ์ธ์ ํน์ง์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
Windows๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ฑ ์๋์ ๊ธฐ๋ณธ์ ์ธ ๋ง์ ๋ค๋ฅธ ์์ ์ ์ํํ๊ธฐ ์ํด ๋ทฐ ์ปจํธ๋กค๋ฌ์ ํจ๊ป ์๋ํฉ๋๋ค.
1. ์ฑ์ ์ฝํ ์ธ ๋ฅผ ํ์ํ ๊ธฐ๋ณธ ์ฐฝ ์ ๊ณต
2. ์ถ๊ฐ ์ฝํ ์ธ ๋ฅผ ํ์ํ๊ธฐ ์ํด ์ถ๊ฐ ์ฐฝ ์ ๊ณต (์ ํ์ )
Xcode๋ ์๋์ผ๋ก ์ฑ์ ๊ธฐ๋ณธ Window๋ฅผ ์ ๊ณตํฉ๋๋ค.
1. ์ต์ด์ ํ๋ก์ ํธ์๋ ์คํ ๋ฆฌ๋ณด๋๋ฅผ ์ฌ์ฉํด์ ์ฑ์ ๋ทฐ๋ฅผ ์ ์ํฉ๋๋ค.
2. ์คํ ๋ฆฌ๋ณด๋๋ Xcode์์ ์๋์ผ๋ก ์ ๊ณตํ๋ AppDelegate(๋๋ SceneDelegate)์ window ํ๋กํผํฐ๊ฐ ์กด์ฌํด์ผ ํฉ๋๋ค.
UIWindow๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ ์์ ์ ์ํด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
1. Window์ z์ถ ๋ ๋ฒจ์ ์ค์ ํฉ๋๋ค. ๋ค๋ฅธ Window์ ๊ด๋ จ๋ Window์ ๊ฐ์์ฑ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
2. Window๋ฅผ ํ์ํ๊ณ ํค๋ณด๋ ์ด๋ฒคํธ์ ๋์์ผ๋ก ์ง์ ํฉ๋๋ค.
3. ์ขํ๊ฐ์ Window ์ขํ๊ณ๋ก ๋ณํํ๊ฑฐ๋ Window ์ขํ๊ณ์์ ๋ณํํฉ๋๋ค.
4. Window์ RootViewController๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
5. Window๊ฐ ํ์๋๋ ์คํฌ๋ฆฐ์ ๋ณ๊ฒฝํฉ๋๋ค.
UIWindow๋ ํ์ ํด๋์ค๋ฅผ ๋ง๋ค ํ์๊ฐ ๊ฑฐ์ ์์ต๋๋ค.
1. Window์์ ๊ตฌํํ ์ ์๋ ํ๋ ํ์ ์ ์ผ๋ฐ์ ์ผ๋ก ์์ ๋ ๋ฒจ์ธ ๋ทฐ ์ปจํธ๋กค๋ฌ์์ ๋ณด๋ค ์ฝ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํฉ๋๋ค.
2. becomeKey() ๋๋ resignKey() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด์ Window์ Key ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์ฌ์ฉ์ ์ ์ ํ๋์ ๊ตฌํํ ๋ ํ์ํด๋์ค๋ก ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
๐ง๐ป๐ป ๊ฐ๋จํ ์์
Swift ์คํ ๋ฆฌ๋ณด๋ ์์ด ํ๋ฉด ์์ํ๊ธฐ (Scene Delegate์์ ํ๋ฉด ์ด๊ธฐํํ๊ธฐ)
iOS 12๊น์ง๋ AppDelegate์์ window๋ฅผ ์์ฑํด์คฌ๋๋ฐ, iOS 13๋ถํฐ๋ SceneDelegate์์ window๋ฅผ ์์ฑํฉ๋๋ค. (๋ฉํฐ ์๋์ฐ๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ด์ฃ !)
๐ค ๋ฐฉ๋ฒ์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์์๋ณผ๊น์?
(1) window๋ฅผ ์ง์ ํฉ๋๋ค.
- window ๊ฐ์ฒด๋ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด์ง ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง๋ค์ด์ ธ์๋ window ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค.
(2) rootViewController ํ๋กํผํฐ
- window์ root viewcontroller๋ฅผ ์ง์ ํฉ๋๋ค.
- window์ ์ต์๋จ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์๋ฏธํฉ๋๋ค.
(3) makeKeyAndVisible() ๋ฉ์๋
- key window๋ก ์ค์ ํ๋ค๋ ์๋ฏธ์ ๋๋ค.
- window๊ฐ ์ฌ๋ฌ ๊ฐ ์กด์ฌํ ๋, ๊ฐ์ฅ ์์ชฝ์ ๋ฐฐ์น๋ window๋ฅผ key window๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- window๋ฅผ ๋ณด์ด๊ฒ ํ๋ค๋ผ๋ ์๋ฏธ๋ ํฌํจํฉ๋๋ค.
โจ ๋ง๋ฌด๋ฆฌํ๋ฉฐ
์ ํ ๊ณต์ ๋ฌธ์๋ฅผ ์ฝ๋ ์ผ์ด ์๊ฐ๋ณด๋ค ์ฝ์ง๋ ์์ง๋ง ํ ๋ฒ ์ฝ๊ณ ์ ๋ฆฌํ๊ณ ๋๋ฉด ๊ทธ๋์ ๋ชจํธํ๋ ๊ฐ๋ ์ด ์กฐ๊ธ์ ์ ๋ฆฌ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ฒ์ UIWindow๊ฐ UIView์ ํ์ํด๋์ค๋ผ๋ ์ฌ์ค์ ์ฒ์ ์๊ฒ ๋์๋๋ฐ, ๊ทธ๋์ 'Window๊ฐ ๋น์ฐํ ๊ฐ์ฅ ๋์ ๋ ์ ์๋๊ฒ ์ด'๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ ๋ฐ๋ก ์ก๋ ์ข์ ์๊ฐ์ด์๋ค์..
๐คฅ์ ๊ทธ๋ฆฌ๊ณ ์ด๊ฑด ์ ๋ฒ์๋ ์๊ฐํ๋๊ฑด๋ฐ ์์ง ์คํ์ ํด๋ณด์ง๋ ๋ชปํ ๋ด์ฉ์ธ๋ฐ์. ๊ฐ๋ฐํ๋ค๊ฐ๋ณด๋ฉด window์ rootViewController๋ฅผ ๊ต์ฒดํ๋ ์ฝ๋๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ์์ฃ . ๊ทธ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด์ ์์ฌ์๋ ๋ทฐ๋ค์ ์ด๋ป๊ฒ ๋ ๊น์? ๋ทฐ๊ฐ ์์ด์ง๋ฉด์ ๋ฉ๋ชจ๋ฆฌ์์๋ ํด์ ๊ฐ ๋ ์ง ๊ถ๊ธํ๋ค์.. (์,, ๋๋ฌด ๋น์ฐํ๊ฑด๊ฐ... ์ด์จ๋ ์ค๋ ํฌ์คํ ๋!)
๐ ๋ ํผ๋ฐ์ค
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[WWDC22] What's new in SF Symbols 4 (2) | 2022.07.06 |
---|---|
[iOS] ์กฐ๊ฑด๋ฌธ(1), if๋ฌธ์ ๋ํ ๊ณ ์ฐฐ (5) | 2022.02.10 |
[iOS] CollectionView Cell ๋๋น ๋์ ์ผ๋ก ์กฐ์ ํ๊ธฐ (8) | 2021.10.28 |
[iOS] ์๋ธ ํด๋์ฑ (6) | 2021.10.07 |
[iOS] Delegate Pattern(๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด) ์์(1) - ์ด์ ํ๋ฉด์ผ๋ก ๋์ด์ค๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ ์ถ์ ๋ (4) | 2021.09.09 |