Xcode로 iOS 프로젝트를 생성하면 기본적으로 만들어지는 몇 가지 파일이 존재합니다.그 중 AppDelegate.swift
파일 안의 내용을 살펴보면 뭔가 좀 중요한 것처럼 보이는데요. 오늘은 AppDelegate.swift
가 어떤 역할을 하는지 알아보도록 하겠습니다.
AppDelegate.swift
안에는 AppDelegate
클래스가 존재하며 이 클래스는 여러분이 만드는 어플리케이션의 중추적인 역할을 합니다. AppDelegate.swift
의 기능에는 크게 두 가지가 있습니다.
여러분의 어플리케이션이 그려질 윈도우를 생성하고, 어플리케이션 내의 상태 변화에 반응할 수 있게끔 합니다. 이러한 상태 변화에는 어플리케이션의 실행, 백그라운도로 전환 종료 등이 있습니다. 이와 관련된 메소드는 다음과 같습니다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions [UIApplicationLaunchOptionsKey: Any]?) -> Bool func applicationWillResignActive(_ application: UIApplication) func applicationDidEnterBackground(_ application: UIApplication) func applicationWillEnterForeground(_ application: UIApplication) func applicationDidBecomeActive(_ application: UIApplication) func applicationWillTerminate(_ application: UIApplication)
- 또한 어플리케이션의 entry point를 생성하고 loop를 돌면서 어플리케이션에게 input event들을 전달합니다. 이러한 행위는 파일의 맨 위에 명시된
UIApplicationMain
이라는 속성에 의해 행해집니다. 이렇게UIApplicationMain
속성하는 것은UIApplicationMain
함수를 호출하고AppDelegate
클래스의 이름을delegate
클래스의 이름으로써 넘기는 것과 동일한 행위입니다.
이렇게 넘어가게 되면 시스템은application object
를 생성하고 이 객체는 어플리케이션의 전체적인 life cycle을 관리하는 역할을 합니다. 그리고 시스템은AppDelegate
클래스를 객체화하여application object
에 할당하고 어플리케이션을 실행시킵니다.
기본적으로 AppDelegate
클래스는 UIApplicationDelegate
프로토콜을 준수하며 이 프로토콜이 제공하는 메소드를 구현함으로써 어플리케이션의 상태 변화나 app-level의 이벤트들을 처리하게 됩니다.
그리고 AppDelegate
클래스는 window
라는 어플리케이션의 윈도우에 대한 참조 변수를 갖고 있습니다. 이 윈도우는 어플리케이션 뷰 계층의 루트가 되며 어플리케이션의 컨텐츠들은 그 위에 그려집니다.
마무리
이렇게 간단하게 AppDelegate.swift
의 역할에 대해 알아보았습니다. 저도 모든 내용이 와닿는 것은 아니지만 어플리케이션의 실행에 있어서 중추적인 역할을 하고 보다 밑의 계층과의 밀접한 관계를 갖는 다는 것을 느낄수 있었습니다. 그만큼 이 파일에서 코드를 작성할 때는 더욱 신중해야할 것 같습니다. 감사합니다.
참고자료