홍로그

Swift @main 본문

iOS

Swift @main

성홍민 2023. 6. 7. 14:43

📖 @main이란?

@main은 SwiftUI에서 사용되는 속성(attribute) 중 하나로, 애플 iOS 앱의 진입점(entry point)을 정의합니다.

@main은 iOS 앱을 진입점에 있는 구조체 또는 클래스로 초기화하는 Swift 특성입니다. 즉, @main은 앱의 시작점을 구체적으로 지정하는 데 사용됩니다.

@main을 사용하면 UIKit 및 SwiftUI 앱에서 앱의 진입 포인트 역할을 하는 앱 델리게이트 객체를 구현할 필요가 없어집니다. 이를 통해 개발자는 소스 코드를 간결하게 유지하고, 앱의 진입 지점을 명확히 표현할 수 있습니다.

또한, @main은 SwiftUI에서 가장 많이 사용되는데, SwiftUI 앱의 경우 기본적으로 @main으로 시작되며, App 프로토콜을 구현하는 구조체 또는 클래스로 @main 키워드를 사용합니다.

App 프로토콜을 구현한 struct는 아래와 같습니다.

import SwiftUI

@main
struct MyApp: App {
   var body: some Scene {
      WindowGroup {
         ContentView()
      }
   }
}

위의 예시에서 MyApp struct가 앱의 시작 지점(entry point) 역할을 합니다. @main 속성을 사용한 이 struct는 메인 앱 구성을 정의하고, WindowGroup을 사용하여 ContentView를 표시합니다.

 

UIKit에서 @main을 사용하는 예시 코드입니다.

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window: UIWindow?
    
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        let window = UIWindow(frame: UIScreen.main.bounds)
        let viewController = UIViewController()
        viewController.view.backgroundColor = .red
        window.rootViewController = viewController
        window.makeKeyAndVisible()
        self.window = window
        
        return true
    }
}

이 예제에서는 @main 어트리뷰트를 사용하여 AppDelegate를 앱의 진입점으로 지정합니다. AppDelegate는 ApplicationDelegate 프로토콜을 준수하며 UIApplicationDelegate 메서드를 구현합니다. application(_:didFinishLaunchingWithOptions:) 메서드에서 기본적인 뷰 컨트롤러를 만들고, 초기 뷰를 붉은색으로 설정한 후에 뷰를 보여주고 있습니다.

 

@main을 사용하여 UIApplicationMain 함수를 별도로 호출할 필요 없이 앱의 시작점을 명확하게 정의할 수 있습니다. 코드가 더 간결해지고 명료해짐으로써 가독성도 향상되었습니다.

 

 

 

반응형

'iOS' 카테고리의 다른 글

SwiftUI @NameSpace  (0) 2023.06.13
SwiftUI ScrollView, ScrollViewReader, ScrollViewProxy  (0) 2023.06.12
App Thinning  (0) 2023.06.05
MVP 패턴  (2) 2023.06.04
@StateObject, @ObservedObject, @EnvironmentObject 비교  (0) 2023.06.03