Search
Duplicate

앱이 시작할 때 main.c에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가?

Created
2023/10/09 06:51
Tags
iOS
태그

 면접 질문 : 앱이 시작할 때 main.c에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가?

 앱 라이프 사이클

사용자가 앱 아이콘을 눌러 앱을 실행하게 되면, 대략 사진과 같은 형태의 생명주기를 통해 메모리에 할당 되었다가 소멸된다.

UIApplicationMain() 호출 부분

Swift 이전 Objective-C로 작성되었던 앱은 C언어 기반이었기에 앱이 실행되면 운영체제가 가장 먼저 main.m 파일 안에 main() 함수를 호출하여 앱이 시작되었다고 한다.
Swift가 C언어 기반은 아니지만 Objective-C와 함께 사용되기 위한 언어여서인지, 동일하게 main() 함수를 호출해야하는데, 우선 xcode로 생성한 iOS 개발 템플릿에는 main.swift 파일은 보이지 않는다.
이유는 UIKit 프레임워크 안에 main() 함수를 숨겨놓았다고 한다.
따라서 앱이 실행되면 가장 먼저 운영체제가 개발자는 찾아볼 수 없는 main() 함수를 호출하고, main() 함수는 뒤이어 UIApplicationMain() 함수를 호출하여 UIApplication 객체가 생성되는 것이다.

UIApplication 이란?

iOS에서 실행되는 앱의 중앙 집중 제어 및 조정 지점
앱 시작 → UIApplicationMain() 호출 → 싱글톤 UIApplication 객체 생성 → shared 클래스 메소드를 호출 → 객체에 접근한다.
앱을 시작하면 UIApplicationMain()이 shared app instance를 만든다.

 앱이 시작할 때 main.c에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가?

→ UIApplication 인스턴스가 생성된다. 이때, 이 UIApplication은 사용자로부터 발생하는 이벤트들을 AppDelegate로 전달하는 역할을 한다.

 @Main에 대해서 설명하시오.

→ Swift 컴파일러가 @Main 어노테이션을 통해 AppDelegate에서 전역범위에 있는 코드를 자동으로 인식하게 하고 실행시킨다. 프로그램 실행을 시작하기 위한 진입점이다.