๐ main & UIApplication
@main
ํ๋ก๊ทธ๋จ์ ์ง์ ์ ์ ๋ํ๋ธ๋ค.
์ด๋ ํ๋ก๊ทธ๋จ์ด๋ ์ง ์์์ ์ธ Entry Point๊ฐ ์กด์ฌํด์ผํ๋ค. Swift์์๋ @main์ ํตํด์ ์ด๋์๋ถํฐ ์ด ์ฑ์ด ์ต์ด ์คํ๋๊ณ ์์๋ ์ง๋ฅผ ๋ช ์ํด์ฃผ๋ ํค์๋์ด๋ค. ์ด ํค์๋๋ Swift 5.3 ์ด์(Xcode 12)๋ถํฐ ์ฌ์ฉ๋ ํค์๋๋ก ๋ฐ๋ก ์ด์ด์ ์ค๋ช ํ๊ฒ ์ง๋ง @main ํค์๋๊ฐ ๋์ค๊ธฐ ์ ์๋ @UIApplcationMain ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
> UIKit์ ๊ฒฝ์ฐ
AppDelegate๊ฐ ์ฌ์ค์ App Life Cycle์ ๊ด๋ฆฌํ๋ ๋ชจ๋ ์ฃผ์ฒด์ด๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ @main ํค์๋๊ฐ ๋ถ๋๋ค.
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
...
}
SwiftUI์ ๊ฒฝ์ฐ
App๊ตฌ์กฐ์ฒด์ @main์ด ๋ถ๊ฒ๋๋ค. SwiftUI๋ก ๊ตฌ์ฑ๋ ์ฑ์์๋ ๊ฐ Viewํ์ ์ ์ค์ ์ ์ธ ๋ทฐ ์ธ์คํด์ค๊ฐ ์์๊ฒ์ด๊ณ ์ด๋ App ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ฉ์ธ์ฑ ๊ตฌ์กฐ์ฒด ํ์ ์ ์ ์๋์ด ์์ ๊ฒ์ด๋ค. ์ฆ, ์ฌ๊ธฐ์๋ SwiftUI App ๊ตฌ์กฐ์ฒด๊ฐ ์ค์ ์ ์ธ ์ฑ ์คํ์ ์ฒ์ ๋ง์ฃผ์น๋ AppDelegate์ ๊ฐ์ ๊ฒ์ผ๋ก ๋ณผ์ ์๊ธฐ์ @main ํค์๋๋ ์ฌ๊ธฐ๋ฅผ ์์ ์ง์ ์ ์ผ๋ก ๊ธฐ๋ณธ ์ค์ ๋์ด์๋๊ฑธ ํ์ธํ ์ ์๋ค.
import SwiftUI
@main
struct SwiftUIApp: App {
...
}
Why @main ?
mainํจ์๋ฅผ ํตํด์ ์์ ์ง์ ์ ์๋ ค์ฃผ๊ณ ์คํํ๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ์ฝ์ ๊ธฐ๋ฐ์ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ์ฌ์ค main()์ ํตํด ์คํ์์ผ์ฃผ๋ ๊ฑธ ์ ์์๊ณ ์ด๊ฒ ์ง์ ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ @main ์ผ๊น?
๊ทธ๊ฑด UIKit ํ๋ ์์ํฌ์ ์กด์งํ๊ธฐ์ @main ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฉ์ธ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ดํฌํ๊ณ ์๋๊ฑฐ๋ผ ๋ณผ ์ ์๋ค.
@UIApplicationMain
Swift5.3 ์ด์ ์๋ ์ด ํจ์๋ฅผ ์ฌ์ฉํ์๋ค. ์ญํ ์ ๋์ผํ๋ค.
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
...
}
์ด๋ ๊ฒ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํ๋ค. ์ฆ ๋น๋์ ์ด์์ด ์๋ค.
ํ์ง๋ง SwiftUI๋ก ๊ตฌ์ฑ๋ ์ฑ์ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก main()์ ์ฌ์ฉํ๋ ์ด์
@main์ ์ฌ์ฉํจ์ผ๋ก ๊ธฐ์กด @UIApplicationMain์ ์ฌ์ฉํ ๋๋ณด๋ค ํ์ ๊ธฐ๋ฐ์ ์ฝ๋์์ ๋ ์๋ง์ ์ฑ ์ง์ ์ ์ ํํํด์ค ์ ์์ผ๋ฉฐ ํ์ ๋ฉ์๋์ธ static func main()์ ํตํด ํ์ฅ ๋ฐ ๊ธฐ๋ณธ ํด๋์ค๋ก ์ ๊ณต๋๋ฉฐ ์ฌ์ฉํ ์ ์๋ ์ฅ์ ์ ๊ฐ์ง๊ฒ ๋๋ค.
๊ทธ๋ ๊ธฐ์ Swift 5.7 ์ด์๋ถํฐ๋ @UIApplicationMain์ ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ @main์ ์ฌ์ฉํ๋๊ฒ์ด ๋ ๋ฐ๋์งํ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
'๐ iOS > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SwiftUI] Property Wrapper โก (3) | 2024.03.27 |
---|---|
[SwiftUI] ํ๋กํผํฐ๋ํผ ์ ๋ฆฌ (0) | 2024.03.17 |
[iOS][SwiftUI] @State @Binding (1) | 2024.01.07 |
[iOS][SwiftUI] Save Color in UserDefaults (0) | 2024.01.01 |
[iOS][SwiftUI] Init () (0) | 2023.12.28 |