🫵결론부터 말하자면 AppDelegate와 SceneDelegate는 iOS 애플리케이션의 생명주기와 사용자 인터페이스를 관리하는 데 사용되는 두 가지 주요 구성 요소인데,
AppDelegate는 앱의 전반적인 생명주기를 관리
SceneDelegate는 여러 창(Scene)을 관리하며 멀티태스킹을 지원한다. -> iOS 13 이후부터 도입된 SceneDelegate는 하나의 앱에서 여러 UI 장면을 독립적으로 다룰 수 있게 한다.
그럼 각각 더 자세하게 알아보자.
1. AppDelegate란?
AppDelegate는 iOS 애플리케이션의 시작, 상태 전환, 종료 등의 주요 이벤트를 처리하는 역할을 한다. 애플리케이션의 전반적인 생명주기를 관리하며, 대부분의 앱 설정과 초기화 작업이 여기에서 이루어진다고 생각하면된다.
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
// 앱 시작 시 호출
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 초기화 작업
return true
}
// 기타 앱 생명주기 메소드
}
주요 역할:
- 앱이 실행될 때 초기 설정 수행 (launch screen)
- 푸시 알림 처리
- 백그라운드에서 포그라운드로 전환될 때 작업 처리
2. SceneDelegate란?
위에 설명한 것과 같이 SceneDelegate는 iOS 13에서 도입되었으며, 하나의 앱 내에서 여러 개의 독립적인 UI 창(Scene)을 관리한다. 이를 통해 멀티 윈도우 기능을 지원하며, 각 장면(Scene)은 자체적인 생명주기를 가진다.
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
// 장면 연결 시 호출
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
}
// 기타 장면 생명주기 메소드
}
주요 역할:
- 새로운 장면(Scene) 생성 및 설정
- 장면이 포그라운드로 들어오거나 백그라운드로 나갈 때 처리
- 멀티태스킹 지원
그럼 둘의 상호작용을 알아볼까?
위에 설명한 것과 같이 AppDelegate는 앱의 전반적인 설정과 생명주기를 관리하며, SceneDelegate는 각 장면의 생명주기를 관리한다고 하였는데 플로우를 살펴보자.
앱이 시작되면 AppDelegate가 먼저 호출되고, 이후 SceneDelegate가 호출되어 각 장면을 설정한다.
또한 앱의 상태 전환은 AppDelegate가 처리하고, 각 장면의 상태 전환은 SceneDelegate가 처리한다.
마지막으로 애플리케이션 생명주기에 대해 이해가 안된 사람들을 위해 예시를 남기려고 한다.
1. 앱 시작 → AppDelegate의 application(_:didFinishLaunchingWithOptions:) 호출
2. 첫 번째 장면 생성 → SceneDelegate의 scene(_:willConnectTo:options:) 호출
3. 앱 활성화 → AppDelegate의 applicationDidBecomeActive(_:) 호출
4. 장면 포그라운드 진입 → SceneDelegate의 sceneDidBecomeActive(_:) 호출
'Swift' 카테고리의 다른 글
[UIKit] info.plist 권한 총정리 (2) | 2024.08.13 |
---|---|
[UIKit] Navigation Bar 숨기기 (0) | 2024.08.05 |