๐ ์๋ช ์ฃผ๊ธฐ(Life Cycle)๋?
์๋ช ์ฃผ๊ธฐ(Life Cycle)๋ ์ฑ์ด ์คํ๋๋ ์๊ฐ๋ถํฐ ์์ ํ ์ข ๋ฃ๋ ๋๊น์ง
์ฑ์ด ์ด๋ค ์ํ(state)์ ์๊ณ , ๊ทธ ์ํ๊ฐ ์ด๋ป๊ฒ ๋ณํ๋๋์ง๋ฅผ ์ค๋ช ํ๋ ๊ฐ๋ ์ ๋๋ค.
์ฑ์ ์คํ ์ค์ผ ์๋ ์๊ณ , ์ ์ ๋ฉ์ถฐ ์์ ์๋ ์์ผ๋ฉฐ, ์์ ํ ์ข ๋ฃ๋ ์ํ์ผ ์๋ ์๊ฒ ์ฃ ~
์ด๋ฌํ ๊ฐ๊ฐ์ ์ํ๋ ์ฑ์ด ๋ฌด์์ ํ ์ ์๊ณ , ๋ฌด์์ ํ ์ ์๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
์๋ช
์ฃผ๊ธฐ๋ฅผ ์ดํดํ๋ฉด ์ฑ์ด ์ธ์ ์ด๊ธฐํ๋๊ณ , ์ธ์ ๋ฉ์ถ๋ฉฐ,
์ธ์ ๋ค์ ํ์ฑํ๋๋์ง๋ฅผ ํ์
ํ ์ ์์ด ์ฑ์ ๋์ ํ๋ฆ์ ์์ธกํ๊ณ ์ ์ดํ ์ ์์ต๋๋ค!
๐ ์ฑ์ ์๋ช ์ฃผ๊ธฐ(App’s Life Cycle) ๋?
์ฑ์ด ์คํ๋๊ฑฐ๋ ์ข ๋ฃ๋ ๋, ๊ทธ๋ฆฌ๊ณ Foreground(ํ๋ฉด์ ๋ณด์ด๋ ์ํ)์ Background(ํ๋ฉด์ ๋ณด์ด์ง ์๋ ์ํ)๋ฅผ ์ค๊ฐ ๋๋ง๋ค ์์คํ ์ด ๋ฐ์์ํค๋ ์ด๋ฒคํธ์ ์ํด ์ฑ์ ์ํ๊ฐ ๋ณํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค.
์ด ๊ณผ์ ์์ ๊ฐ๋ฐ์๋ ์ฑ์ ์คํ ํ๋ฆ์ ์ ์ดํ๊ณ ,
์ํ ๋ณํ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ํ๋ฉด์ ๊ฐฑ์ ํ๋ ์์ ์ ์ํํฉ๋๋ค.
๋ฐ๋ผ์ ์ฑ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ดํดํ๋ ๊ฒ์ ์ฑ์ ์์ ์ ์ธ ์คํ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ ์ ์ํด ๋งค์ฐ ์ค์ํฉ๋๋ค!!
๐ ์ฑ์ ์ํ (App State)
์ฑ์ ์ํ๋ ์ด ๋ค์ฏ ๊ฐ์ง๋ก ๊ตฌ๋ถ๋๋๋ฐ์.
๊ฐ ์ํ๋ ์ฑ์ด ํ์ฌ ์ด๋ค ๋์์ ์ํํ ์ ์๋์ง๋ฅผ ๋ํ๋ ๋๋ค.

- Not Running
- ์ฑ์ด ์์ง ์คํ๋์ง ์์๊ฑฐ๋, ์์ ํ ์ข ๋ฃ๋์ด ๋์ํ์ง ์๋ ์ํ์ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.
- Foreground – Inactive
- ์ฑ์ด ํ๋ฉด์ ํ์๋๊ณ ์์ง๋ง, ์ฌ์ฉ์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ ์๋ ์ํ์ ๋๋ค.
- ์๋ฅผ ๋ค์ด, ๋ฉํฐํ์คํน ํ๋ฉด์ผ๋ก ์ ํ๋๊ฑฐ๋ ์ ํ๋ ์๋ฆผ์ด ๋์ฐฉํ์ ๋ ์ด ์ํ๋ก ์ง์ ํฉ๋๋ค.
- Foreground – Active
- ์ฑ์ด ํ๋ฉด์ ํ์๋๋ฉฐ, ์ฌ์ฉ์ ์ ๋ ฅ์ ์ ์์ ์ผ๋ก ๋ฐ์ํ๋ ์ํ์ ๋๋ค.
- ์ฑ์ด ์คํ๋ ์งํ ๋ฐ๋ก Active ์ํ๊ฐ ๋๋ ๊ฒ์ ์๋๋ฉฐ,
- ๋ฐ๋์ Inactive ์ํ๋ฅผ ๊ฑฐ์ณ Active๋ก ์ ํ๋ฉ๋๋ค.
- Background – Running
- ์ฑ์ด ํ๋ฉด์๋ ๋ณด์ด์ง ์์ง๋ง ์ฌ์ ํ ์ฝ๋๊ฐ ์คํ ์ค์ธ ์ํ์ ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์์ ์ฑ์ด ํ๋ฉด์์ ์ฌ๋ผ์ ธ๋ ๋ ธ๋๊ฐ ๊ณ์ ์ฌ์๋๋ ๊ฒฝ์ฐ๊ฐ ์ด์ ํด๋นํฉ๋๋ค.
- ์๋ฒ์์ ๋ฐ์ดํฐ ๋๊ธฐํ๋ ํ์ด๋จธ ๋์ ๋ฑ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- Background – Suspended
- ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ด๋ํ ๋ค ์คํ์ ๋ฉ์ถ๊ณ , ๋ฉ๋ชจ๋ฆฌ์๋ง ๋จ์ ์๋ ์ํ์ ๋๋ค.
- ์ด ์ํ์์๋ ์ฝ๋๋ ์คํ๋์ง ์์ง๋ง, ์ต๊ทผ ์คํ ์ ๋ณด๋ฅผ ๋ณด๊ดํ์ฌ
- ์ฌ์ฉ์๊ฐ ์ฑ์ ๋ค์ ์คํํ ๋ ๋น ๋ฅด๊ฒ ๋ณต์ํ ์ ์์ต๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก Background ์ํ๋ก ์ ํ๋ ํ 2~3์ด ๋ด์ Suspended๋ก ์ง์ ํ๋ฉฐ,
- iOS์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๋ฉด ๊ฐ์ฅ ๋จผ์ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ฉ๋๋ค.
- ๋ฐ๋ผ์ ์ฑ์ “์ข ๋ฃํ์ง ์์๋๋ผ๋”, ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋๋ฉด ๋ค์ ์ฒ์๋ถํฐ ์คํ๋ฉ๋๋ค.
๐ iOS 13 ์ด์ : App-Based Life Cycle
iOS 13 ์ด์ ์๋ ์ฑ(App) ์ ์ฒด๊ฐ ํ๋์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ก์ผ๋ฉฐ, ๋ชจ๋ ์ํ ๋ณํ ์ด๋ฒคํธ๋ UIApplicationDelegate๊ฐ ๊ด๋ฆฌํ์ต๋๋ค.
์ฑ์ ์คํ, ์ข ๋ฃ, ํฌ๊ทธ๋ผ์ด๋·๋ฐฑ๊ทธ๋ผ์ด๋ ์ ํ ๋ฑ ์ฑ ์ ๋ฐ์ ์ํ ๋ณํ๊ฐ ์ฑ ์ ์ฒด UI์ ์ง์ ์ํฅ์ ๋ฏธ์ณค๊ณ ,
๋ชจ๋ ํ๋ฉด(ViewController)๊ณผ ์ธํฐํ์ด์ค๊ฐ ํ๋์ ํ๋ฆ์ผ๋ก ๋์ํ๋ ๊ตฌ์กฐ์์ต๋๋ค.
iOS 13 ์ด์ ์ ์ํ ์ ํ ํ๋ฆ
์๋๋ Apple ๊ณต์ ๋ฌธ์์ ๋์จ iOS 13 ์ด์ ์ ์ฑ ์ํ ์ ํ๋์ ๋๋ค!

- Not Running: ์ฑ์ด ์์ง ์คํ๋์ง ์์๊ฑฐ๋ ์์ ํ ์ข ๋ฃ๋ ์ํ
- Inactive: ์ฑ์ด ์คํ ์ค์ด์ง๋ง ์ด๋ฒคํธ๋ฅผ ๋ฐ์ง ๋ชปํ๋ ์ํ (์ ํ, ์๋ฆผ ๋ฑ)
- Active: ์ฑ์ด ํ๋ฉด์์ ์คํ ์ค์ด๋ฉฐ ์ฌ์ฉ์์ ์ํธ์์ฉํ ์ ์๋ ์ํ
- Background: ์ฑ์ด ํ๋ฉด์๋ ๋ณด์ด์ง ์์ง๋ง ์ฝ๋๋ฅผ ์คํ ์ค์ธ ์ํ
- (์: ์์ ์ฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฌ์, ๋ฐ์ดํฐ ๋๊ธฐํ ๋ฑ)
- Suspended: ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ ํ๋ ๋ค, ๋ฉ๋ชจ๋ฆฌ์๋ง ๋จ์ ์๋ ์ํ
์ฆ, ์ฑ์ Not Running → Inactive → Active ๋๋ Active → Inactive → Background → Suspended ํํ๋ก ์ ํ๋ฉ๋๋ค.
๐ iOS 13 ๋ฒ์ ํน์ ๊ทธ ์ดํ ๋ฒ์ : Scene ์ฌ์ฉ
์ด์ ๊น์ง๋ ํ๋์ ์ฑ์ด ํ๋์ ํ๋ฉด(UI)๋ง ๊ฐ์ง๋ ๊ตฌ์กฐ์์ง๋ง, iOS 13๊ณผ ํจ๊ป iPadOS๊ฐ ๋ฑ์ฅํ๋ฉด์ ์ด ๊ฐ๋ ์ด ์์ ํ ๋ฐ๋์์ต๋๋ค.
iPad์์ ํ๋์ ์ฑ์ ๋ ์ฐฝ์ผ๋ก ๋๋์ด ์ฌ์ฉํ๋ ๊ฒฝํ์ด ์๋์?
์ด๋ iOS 13๋ถํฐ ํ๋์ ์ฑ ์์์๋ ์ฌ๋ฌ ๊ฐ์ ํ๋ฉด(Scene)์ ๋์์ ๋์ธ ์ ์๊ฒ ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ, ์ด์ ์ฑ์ ๋ ์ด์ “ํ ๋ฒ์ ํ๋์ ํ๋ฉด๋ง ๋ณด์ฌ์ฃผ๋ ๊ตฌ์กฐ”๊ฐ ์๋๋ผ, ์ฌ๋ฌ Scene์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๊ตฌ์กฐ๋ก ๋ฐ์ ํ์ต๋๋ค.
iOS 13 ์ด์ ์๋ ๋ชจ๋ ์๋ช ์ฃผ๊ธฐ ์ด๋ฒคํธ๋ฅผ AppDelegate๊ฐ ์ฒ๋ฆฌํ์ง๋ง, ์ด์ ๋ ์ญํ ์ด ๋ถ๋ฆฌ๋์ด SceneDelegate๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
| ๋ด๋น ๊ฐ์ฒด | ์ญํ | ์ค๋ช |
| AppDelegate | ์ฑ ์ ์ฒด์ ์คํ, ์ข ๋ฃ, ํ๋ก์ธ์ค ๊ด๋ฆฌ | ์ฑ ๋จ์์ ์๋ช ์ฃผ๊ธฐ์ ์์คํ ์ด๋ฒคํธ ์ฒ๋ฆฌ |
| SceneDelegate | UI ํ์ ๋ฐ ์ํ ๊ด๋ฆฌ | ํ๋ฉด(Scene) ๋จ์์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ |
์ฑ(App)์ ์๋ช ์ฃผ๊ธฐ๋ AppDelegate๊ฐ, UI(Scene)์ ์๋ช ์ฃผ๊ธฐ๋ SceneDelegate๊ฐ ๊ด๋ฆฌํฉ๋๋ค.

์ฑ์ด Scene์ ์ง์ํ๋ฉด, ๊ฐ Scene์ UI ์๋ช ์ฃผ๊ธฐ ์ด๋ฒคํธ๋ SceneDelegate๊ฐ ๊ด๋ฆฌํฉ๋๋ค.
Scene์ ๊ธฐ๊ธฐ์์ ์คํ๋๋ ์ฑ ํ๋ฉด์ ํ ์ธ์คํด์ค๋ก, ์ฌ์ฉ์๋ ํ๋์ ์ฑ ์์์ ์ฌ๋ฌ Scene์ ๋์ฐ๊ฑฐ๋ ๋ซ์ ์ ์์ต๋๋ค.
๊ฐ Scene์ ๋ ๋ฆฝ์ ์ธ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ฏ๋ก, ํ Scene์ด Foreground์ ์์ ๋ ๋ค๋ฅธ Scene์ Background์ ์์ ์๋ ์์ต๋๋ค.
์ฌ์ฉ์๋ ์์คํ ์ด ์ Scene์ ์์ฒญํ๋ฉด
UIKit์ด Scene์ ์์ฑํ๊ณ , ์ฌ์ฉ์๊ฐ ์ฐ Scene์ Foreground๋ก, ์์คํ ์ด ๋ง๋ Scene์ Background์์ ๋์ํฉ๋๋ค!

๐ข ์ฑ ์คํ
์ฑ์ด ์คํ๋๊ณ ํ๋ฉด์ ํ์ํ๊ธฐ ์ํ ์ค๋น๊ฐ ์๋ฃ๋๋ฉด ๋ค์ ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
application(_:didFinishLaunchingWithOptions:)
- ์ฑ ์ด๊ธฐ ์ค์ ์ ์ํํ๊ณ , ํ๋ฉด์ด ๋ํ๋๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค.
- (์: ์ค์ ๊ฐ ๋ก๋, ์์กด์ฑ ์ฃผ์ , ์ด๊ธฐ UI ๊ตฌ์ฑ ๋ฑ)
๐ Scene ์ฐ๊ฒฐ
์ฑ์ด ์คํ๋๋ฉด UIKit์ด Scene์ ์์ฑํ๊ณ ์ฐ๊ฒฐํฉ๋๋ค.
์ด๋ ๋ค์ ๋ฉ์๋๋ค์ด ์์๋๋ก ํธ์ถ๋ฉ๋๋ค.
application(_:configurationForConnecting:options:)
- ์๋ก์ด Scene์ ์์ฑํ๊ณ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ค์ ์ ๋ฐํํฉ๋๋ค.
- UISceneConfiguration ๊ฐ์ฒด๋ฅผ ํตํด delegate ์ง์ ๋ฐ Scene ๊ด๋ จ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค.
- ๋ณดํต Info.plist์ ๋ฑ๋ก๋ ๊ธฐ๋ณธ ์ค์ ์ ์ฌ์ฉํฉ๋๋ค.
scene(_:willConnectTo:options:)
- Scene์ด ์ค์ ๋ก ์ฐ๊ฒฐ๋๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค.
- ์ด์ ์๋ AppDelegate์ didFinishLaunchingWithOptions์์ UIWindow๋ฅผ ๋ง๋ค์์ง๋ง,
- ์ด์ ๋ ์ด ๋ฉ์๋์์ ์์ฑํ ์ ์์ต๋๋ค.
- Storyboard๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ UIKit์ด ์๋์ผ๋ก UIWindow๋ฅผ ์์ฑํฉ๋๋ค.
sceneDidBecomeActive(_:)
- Scene์ด Inactive → Active ์ํ๋ก ์ ํ๋ ๋ ํธ์ถ๋ฉ๋๋ค.
๐ต ํ ํ๋ฉด์ผ๋ก ์ด๋ (Active → Inactive → Background)
์ฑ ์คํ ํ ํ ํ๋ฉด์ผ๋ก ๋๊ฐ๋ฉด ๋ค์ ์์๋ก ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
sceneWillResignActive(_:)
- Scene์ด Active → Inactive ์ํ๋ก ์ ํ๋ ๋ ํธ์ถ๋ฉ๋๋ค.
- (์: ์ ํ ์์ , ์๋ฆผ ํ์ ๋ฑ)
sceneDidEnterBackground(_:)
- Scene์ด Background๋ก ์ง์ ํ ๋ ํธ์ถ๋ฉ๋๋ค.
- (์: ๋ฐ์ดํฐ ์ ์ฅ, ๋ฆฌ์์ค ํด์ , ์ํ ๋ณต์ ์ฒ๋ฆฌ ๋ฑ)
๐ฃ ์ฑ์ผ๋ก ๋ณต๊ท (Background → Inactive → Active)
๋ฐฑ๊ทธ๋ผ์ด๋์ ์๋ ์ฑ์ด ๋ค์ ์คํ๋๋ฉด ๋ค์ ์์๋ก ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
sceneWillEnterForeground(_:)
- Scene์ด Background → Inactive๋ก ์ ํ๋ ๋ ํธ์ถ๋ฉ๋๋ค.
- (UI ๊ฐฑ์ ์ค๋น, ํ๋ฉด ๋ณต์ ๋ฑ)
sceneDidBecomeActive(_:)
- Scene์ด ๋ค์ Active ์ํ๋ก ๋ณต๊ทํ ๋ ํธ์ถ๋ฉ๋๋ค.
๐ด Scene ์ฐ๊ฒฐ ํด์
๋ฉํฐํ์คํน ํ๋ฉด(App Switcher)์์ Scene์ ๋ซ์ ๋ ํธ์ถ๋ฉ๋๋ค.
iOS 13 ์ดํ์๋ ํ๋์ ์ฑ์ด ์ฌ๋ฌ Scene์ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก,
๋ชจ๋ Scene์ด ํด์ ๋์ด์ผ ์ฑ์ด ์์ ํ ์ข ๋ฃ๋ฉ๋๋ค.
sceneDidDisconnect(_:)
- ํน์ Scene์ ์ฐ๊ฒฐ์ด ํด์ ๋ ๋ ํธ์ถ๋ฉ๋๋ค.
application(_:didDiscardSceneSessions:)
- ์ฌ์ฉ์๊ฐ ๋ฉํฐํ์คํน ํ๋ฉด์์ ํ ๊ฐ ์ด์์ Scene์ ์ข ๋ฃํ์ ๋ ํธ์ถ๋ฉ๋๋ค.
applicationWillTerminate(_:)
- ์ฑ์ด ์์ ํ ์ข ๋ฃ๋ ๋ ํธ์ถ๋ฉ๋๋ค.
- ๋จ, ์์คํ ์ด ๊ฐ์ ๋ก ์ข ๋ฃํ ๊ฒฝ์ฐ์๋ ํธ์ถ๋์ง ์์ ์ ์์ต๋๋ค.
๐ ViewController ์๋ช ์ฃผ๊ธฐ

ViewController๋ iOS ์ฑ์์ ํ๋ฉด ๋จ์๋ฅผ ๋ด๋นํ๋ ๊ฐ์ฒด๋ก, ํ๋์ ํ๋ฉด์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ค๊ณ ์ฌ๋ผ์ง๋ ๊ณผ์ ์์ ์ฌ๋ฌ ๋จ๊ณ์ ์๋ช ์ฃผ๊ธฐ(Lifecycle)๋ฅผ ๊ฑฐ์นฉ๋๋ค.
์ด ์๋ช ์ฃผ๊ธฐ๋ ๋ทฐ๊ฐ ์ธ์ ์์ฑ๋๊ณ , ์ธ์ ํ๋ฉด์ ํ์๋๋ฉฐ, ์ธ์ ์ฌ๋ผ์ง๋์ง๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์๋ ค์ฃผ๊ธฐ ๋๋ฌธ์, ์์ ์ ๋ฐ๋ผ ์ ์ ํ ์์ ์ ์ํํ๊ธฐ ์ํด ๋ฐ๋์ ์ดํดํด์ผ ํ๋ ๊ฐ๋ ์ ๋๋ค.
loadView
loadView๋ ๋ทฐ(View)๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ์์ ์ ํธ์ถ๋๋ ๋ฉ์๋์ ๋๋ค.
์ฆ, ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์์ ๋ง์ ํ๋ฉด์ ๊ตฌ์ฑํ ์ ์๋๋ก ๊ธฐ๋ณธ ๋ทฐ๋ฅผ ๊ต์ฒดํ ์ ์๋ ์ ์ผํ ์์ ์ ๋๋ค.
iOS์์ ๊ฐ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก UIView ์ธ์คํด์ค๋ฅผ ์์ ํ๊ณ ์์ต๋๋ค.
์ด ์์ ์์ loadView๋ฅผ ์ฌ์ ์ํ๋ฉด ํด๋น ๋ทฐ๋ฅผ ์ง์ ์์ฑํ๊ณ , ํ์ํ ์์ฑ์ ์ค์ ํ์ฌ ์ปค์คํฐ๋ง์ด์งํ ์ ์์ต๋๋ค.
๋ณดํต ์ฝ๋ ๊ธฐ๋ฐ์ผ๋ก UI๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ, loadView ์์์ ๋ฃจํธ ๋ทฐ๋ฅผ ์ง์ ์ด๊ธฐํํฉ๋๋ค.
๋ํ, loadView๋ฅผ ์ฌ์ ์ํ ๋๋ ๋ค์ ์ฌํญ์ ์ ์ํด์ผ ํฉ๋๋ค.
- super.loadView()๋ฅผ ํธ์ถํ์ง ์์ต๋๋ค.
- loadView๋ฅผ ์ฌ์ ์ํ๋ฉด ์์คํ ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ํํ๋ ๋ทฐ ์์ฑ ๋ก์ง์ด ๋์ฒด๋๋ฏ๋ก, super๋ฅผ ํธ์ถํ ํ์๊ฐ ์์ต๋๋ค.
- ๋ฐ๋์ self.view์ ์๋ก์ด ๋ฃจํธ ๋ทฐ๋ฅผ ํ ๋นํด์ผ ํฉ๋๋ค.
- ๊ทธ๋ ์ง ์์ผ๋ฉด ํ๋ฉด์ด ํ์๋์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ก ๋ทฐ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
override func loadView() {
let rootView = UIView()
rootView.backgroundColor = .white
self.view = rootView
}
์ด์ฒ๋ผ loadView๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ฃจํธ ๋ทฐ๋ฅผ ์ง์ ์์ฑํ๊ณ ๊ต์ฒดํ ์ ์๋ ๋ฉ์๋์ด๋ฉฐ, ์ฝ๋ ๊ธฐ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฃผ๋ก ํ์ฉ๋ฉ๋๋ค.
viewDidLoad
viewDidLoad๋ ๋ทฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ ํ ์ฌ๋ผ์จ ์งํ ํธ์ถ๋ฉ๋๋ค.
๋ทฐ ์ปจํธ๋กค๋ฌ์ ์๋ช ์ฃผ๊ธฐ์์ ํ ๋ฒ๋ง ํธ์ถ๋๋ ๋ฉ์๋๋ก, ์ฃผ๋ก ์ด๊ธฐ ์ค์ ๊ณผ UI ๊ตฌ์ฑ์ ๋ด๋นํฉ๋๋ค.
์ด ์์ ์๋ ๋ทฐ์ ๋ชจ๋ ์์๋ ์ด ์ด๊ธฐํ๋์ด ์์ผ๋ฏ๋ก, ์๋ธ๋ทฐ ์ถ๊ฐ, ๋ฐ์ดํฐ ์ด๊ธฐํ, ๋คํธ์ํฌ ์์ฒญ ๋ฑ์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ํฉํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก setUI(), setLayout(), addTarget()๊ณผ ๊ฐ์ ์ด๊ธฐํ ๋ฉ์๋๋ฅผ ๋ฐ๋ก ์ ์ํ๊ณ , viewDidLoad์์ ํธ์ถํ๋ ํํ๋ก ๊ด๋ฆฌํฉ๋๋ค.
viewWillAppear
viewWillAppear๋ ๋ทฐ๊ฐ ํ๋ฉด์ ๋ํ๋๊ธฐ ์ง์ ํธ์ถ๋ฉ๋๋ค.
viewDidLoad๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋ฒ๋ง ํธ์ถ๋๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ, ์ด ๋ฉ์๋๋ ๋ทฐ๊ฐ ๋ค์ ํ๋ฉด์ ํ์๋ ๋๋ง๋ค ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถ๋ฉ๋๋ค.
์ฆ, ๋ค๋ฅธ ํ๋ฉด์ ๋ณด๊ณ ๋์์์ ๋ ์ต์ ์ํ๋ก ๊ฐฑ์ ์ด ํ์ํ๋ค๋ฉด ์ด ์์ ์ด ์ ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์นด์นด์คํก์ ์ฑํ ๋ฐฉ ๋ชฉ๋ก์์ ๋ง์ง๋ง ๋ฉ์์ง๋ฅผ ๊ฐฑ์ ํ๊ฑฐ๋, ์์ฝ ์ฑ์์ ๋ณ๊ฒฝ๋ ์ข์ ์ ๋ณด๋ฅผ ๋ค์ ํ์ํ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.

viewDidAppear
viewDidAppear๋ ๋ทฐ๊ฐ ์ค์ ๋ก ํ๋ฉด์ ์์ ํ ํ์๋ ์งํ ํธ์ถ๋ฉ๋๋ค.
์ด ์์ ์๋ ์ ๋๋ฉ์ด์ ์ด๋ ํ์ด๋จธ, ๋คํธ์ํฌ ์์ฒญ ๋ฑ ํ๋ฉด ํ์ ์ดํ ์คํ๋์ด์ผ ํ๋ ๋ก์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
viewWillDisappear
viewWillDisappear๋ ๋ทฐ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง๊ธฐ ์ง์ ํธ์ถ๋ฉ๋๋ค.
์ด ์์ ์๋ ์ ๋๋ฉ์ด์ ์ ์ค๋จํ๊ฑฐ๋, ํ์ด๋จธ๋ฅผ ๋ฉ์ถ๋ ๋ฑ ํ๋ฉด์ด ์ฌ๋ผ์ง๊ธฐ ์ ๋ง๋ฌด๋ฆฌํด์ผ ํ ์์ ์ ์ํํฉ๋๋ค.
viewDidDisappear
viewDidDisappear๋ ๋ทฐ๊ฐ ํ๋ฉด์์ ์์ ํ ์ฌ๋ผ์ง ์งํ ํธ์ถ๋ฉ๋๋ค.
์ด๋ ๋ทฐ๋ ๋จ์ํ ํ๋ฉด์์ ๋ณด์ด์ง ์๊ฒ ๋ ์ํ์ด๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๊ฒ์ ์๋๋๋ค.
์ฆ, ํ์ ์ ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ํ์๋ ์ ์์ต๋๋ค.
ViewController ์๋ช ์ฃผ๊ธฐ๊ฐ ํ์ํ ์ด์
iOS๋ ํ๋ฉด ์ ํ ์์ ๋ง๋ค ๋ด๋ถ์ ์ผ๋ก ํน์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ํธ์ถํฉ๋๋ค.
์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ํ๋ฉด์ ํน์ ์์ ์ ๋ง์ถฐ ์ ์ ํ ์์ ์ ์ ์ดํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด,
- ํ๋ฉด์ด ๋ํ๋๊ธฐ ์ ๋ฐ์ดํฐ๋ฅผ ์ต์ ํํด์ผ ํ๋ค๋ฉด viewWillAppear,
- ํ๋ฉด์ด ์์ ํ ํ์๋ ํ ์ ๋๋ฉ์ด์ ์ ์์ํ๋ ค๋ฉด viewDidAppear,
- ํ๋ฉด์ด ์ฌ๋ผ์ง ๋ ํ์ด๋จธ๋ฅผ ์ข ๋ฃํ๋ ค๋ฉด viewWillDisappear์ ๊ฐ์ด
- ์ํฉ์ ๋ง๋ ๋ฉ์๋๋ฅผ ์ ํํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ ์๋ช ์ฃผ๊ธฐ๋ ํ๋ฉด์ ํ๋ฆ์ ์์ธกํ๊ณ ์ ์ดํ๊ธฐ ์ํ ํต์ฌ ๊ฐ๋ ์ ๋๋ค.
์ด๋ฅผ ์ ํํ ์ดํดํ๋ฉด ํ๋ฉด ์ ํ, ์ํ ๊ด๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ํจ์จํ๋ฅผ ๋ณด๋ค ์์ ์ ์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
'๐ถ๐ข๐ฆ > ๐ iOS ๊ฐ๋ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [iOS / Swift] Equatable, Hashable, Comparable (0) | 2025.11.05 |
|---|---|
| [iOS / Swift] Enum์ด๋? (2) | 2025.11.04 |
| [iOS / Swift] Optional์ด๋? (1) | 2025.10.16 |
| [iOS / Swift] ์ ๊ทผ ์ ์ด์(Access Control Levels) (0) | 2025.10.16 |
| [iOS / Swift] final ํค์๋์ ์ฑ๋ฅ์ ์ด์ ์ ๋ํด์ (0) | 2025.10.16 |