Deep_Dev

 

๐Ÿ“š 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