iOS에서 @main은 Swift 프로그램의 진입점을 표시하는 데 사용되는 attribute입니다. Swift 5.3 이후 @UIApplicationMain을 대체하기 위해 도입되었습니다.
import UIKit
@main
struct MyMain {
static func main() -> Void {
UIApplicationMain(
CommandLine.argc,
CommandLine.unsafeArgv,
nil,
NSStringFromClass(AppDelegate.self)
)
}
}
// look, ma, no @UIApplicationMain!
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool {
...
}
}
@main은 Swift 5.3에서 도입된 새로운 기능입니다. 앱의 진입점을 지정하고 UIApplicationMain 함수를 자동으로 호출한다는 면에서는 두 attribute가 동일합니다. 즉 main.swift 파일을 직접 생성하는 대신 Swift가 생성하도록 할 수 있습니다.@main을 사용하면 커스텀 타입 중 하나를 @main으로 지정한 후 static main 함수를 선언하여 main.swift 파일에서 수행했던 모든 작업을 수행할 수 있습니다. 이를 type-based program entry point라고 하며 @UIApplicationMain이 할 수 없는 작업입니다.@main은 struct에도 선언 가능하다는 차이가 있습니다. 이는 진입점이 주로 struct로 선언되는 SwiftUI의 새로운 라이프사이클에 대응하기 위함입니다.UIApplicationMain 함수를 자동으로 호출한다는 면에서 동일합니다.struct에도 선언 가능하며 따라서 SwiftUI에서도 사용이 가능합니다.