What is @main in Swift

[Swift] Entry Point란?

Files and Initialization - Swift Blog

swift-evolution/0281-main-attribute.md at main · apple/swift-evolution

모든 프로그램에는 항상 앱이 시작되어야 하는 진입점이 있으며 Swift도 예외는 아니다. 아주 먼 옛날에는 아래와 같이 main.m 을 가지고 잇었다

main.m
int main(int argc, char *argv[]) {
	@autoreleasepool {
		return UIApplicationMain(argc,
														 argv,
														 nil, 
														 NSStringFromClass([AppDelegate Class]));
	}
}

위의 코드는 우리가 더 이상 사용하지 않는 아주 오래된 코드이다. 앱의 진입점을 알려주는 c 시대의 오래된 방식이다.

Swift에서는 계속 사용할 수 있으며 main.swift는 앱의 진입점이 된다.

main.swift
autoreleasepool {
	UIApplicationMain(CommandLine.argc,
										CommandLine.unsafeArgv,
										nil,
										NSStringFromClass(AppDelegate.self))
}

오늘날 우리는 두 가지를 가지고 있다

@UIApplicationMain

이 주석을 클래스에 추가한다는 것은 이 클래스가 Application의 Delegate이고 UIApplicationMain(:,:,:,:) 자신을 만들고 이 클래스를 Delegate로 제공하는 것과 동일하다는 것을 의미한다.

@main

이 주석을 클래스, 구조체 또는 열거형에 추가하면 앱에 대한 진입점이 포함되고 static main 함수를 제공해야 함을 의미한다. 따라서 다음과 같이 할 수 있다.