이번 글에서는 App의 생명 주기에 대하여 알아보겠습니다.
저도 어떤 식으로 동작하는지 잘 몰라 이번 기회로 많은 것을 알아볼 수 있는 기회가 되었습니다.
App의 생명 주기란? App이 실행되어 종료까지의 과정이라고 합니다.
크게 App이 보이지 않는 상태인 Background상태와 App이 화면에 출력되어지고 있는 Foreground상태로 나눌 수 있습니다.
1. 앱 실행
그렇다면 App을 실행할 시 내부에서는 어떠한 동작이 진행되고 있는지 한 번 알아보겠습니다.
- UIApplication의 생성
- Event Loop 에서 발생한 여러 Event 를 감지, AppDelegate에 전달해 줍니다.
- @UIApplicationMain 어노테이션이 있는 클래스를 찾아 AppDelegate 클래스를 생성
- 프로젝트 생성 시 AppDelegate.swift에 작성되어 있습니다.
- App의 상태에 따라 실행될 수 있는 함수 들이 정의되어 있습니다.
- iOS13.0이후의 SceneDelegate.swift와 나뉘어져 있는 분은 이 클래스 안에 App의 상태가 작성되어 있습니다.
-
Main Event Loop 실행
- 유저의 입력에 따른 이벤트 입니다. (터치, 제스처 등)
2. App State
다음으로 AppState에 대하여 알아보겠습니다.
- Not running(Terminated) : App이 실행되어 있지 않거나 시스템에 인하여 완전히 종료된 상태입니다.
- Inactive(Foreground) : 화면이 표시중인 상태인 Foreground에는 두 가지의 상태가 존재합니다. 그 중 Inactive는 App이 실행중이지만 event를 받지 않는 상태를 나타냅니다.
- Active(Foreground) : App이 실행되어 있고 event를 받고 있는 상태입니다.
- Background : 홈 화면으로 이동 하여 Background 상태에 있지만 실행되는 코드가 있는 상태입니다. 홈 화면이어도 App의 기능이 동작하는 것이 여기에 해당합니다.
- Suspended : 앱이 Background 상태에 있고 실해되는 코드가 없는 상태입니다.
3. AppDelegate에서의 활용
다음으로 그렇다면 App State를 AppDelegate에서 어떻게 활용할 수 있는지 알아보겠습니다.
AppDelegate에는 아래와 같은 메서드가 작성되어 있기 때문에 상황에 맞게 로직을 구현할 수가 있습니다.
- application(_:didFinishLauncingWithOptions:) - App 실행 시
- applicationWillResignActive(_:) - App이 active에서 Inactive 상태로 전환될 시
- applicationDidEnterBackground(_:) - App이 Background 상태로 전환될 시
- applicationWillEnterForeground(_:) - App이 Background에서 Foreground 상태로 전환될 시
- applicationDidBecomeActive(_:) - App이 active상태로 전환되었을 시
- applicationWillTerminate(_:) - App이 종료되기 직전
4. 마무리
이번 글을 통하여 App의 생명 주기에 대하여 알아보았습니다.
App 개발에 있어서 개발 실력도 물론 중요하지만 App을 얼마나 이해하고 있는가도 정말 중요한 것 같습니다.
저도 이번 주제에 대해서 알아보면서 많을 것을 알 수 있는 기회가 되었고 부족한 부분을 채울 수 있었습니다.
지적 사항이나 궁금하신 점은 댓글에 적어주시면 감사하겠습니다.
#참조
https://velog.io/@cskim/iOS-App-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0Life-Cycle
[iOS] App Life Cycle
iOS Application의 생명 주기에 대해 알아봅니다
velog.io
앱 생명주기(App Life Cycle)
swift로 앱을 만들기에 앞서 기본적인 앱의 생명주기(Life Cycle)에 대해 정리해보려 합니다. 해당 내용은 애플개발자페이지와 medium블로그를 참고하였습니다. 앱 생명주기(App Life Cycle) 앱의 생명주��
twer.tistory.com
환경
Xcode 11.3.1
Swift 5
'Swift > 정보 공유' 카테고리의 다른 글
[Swift] discardableResult 에 대해 알아보자! (0) | 2021.12.08 |
---|---|
[Swift] iOS 로컬라이징을 한 번 알아보자! (0) | 2020.06.23 |
[Swift] iOS ViewController의 LifeCycle에 대하여 알아보자! (0) | 2020.06.22 |
[Swift] UIActivityController에 대하여 알아보자! (0) | 2020.06.08 |
[Swift] DispatchTimer를 사용해보자! (0) | 2020.06.05 |