일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Universal Link
- SwiftUI
- 이것이나의다정입니다
- The Composable Architecture
- AnyCancellable
- async/await
- @NameSpace
- SFSafariView
- Custom URL Scheme
- wwdc23
- SwiftData
- Concurrency Programming
- matchedGeometryEffect
- App Thinning
- @main
- await
- fileprivate
- MVVM
- swift
- combine
- ScrollViewReader
- ScrollViewProxy
- Static Dispatch
- Combine vs Async/Await
- ios
- @ObservedObject
- async
- architecture
- Dynamic Dispatch
- @StateObject
- Today
- Total
홍로그
Swift @main 본문
📖 @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 |