"앱이 실행부터 종료까지 거치는 다양한
상태(State)와전환(Transition)과정"
👉 핵심 개념
시스템이 메모리, 배터리, 사용자 경험을 위해 앱의 상태를 자동으로 관리
개발자는 각 상태 전환 시 필요한 작업을 적절히 처리해야 함 (예: 데이터 저장, 리소스 정리)
iOS 13+부터는 UISceneDelegate로 생명주기 관리 (멀티 윈도우 지원)
iOS 12 이하는 UIApplicationDelegate에서 처리하기 때문에 iOS 13+ 기준으로 알아보도록 하겠다.
🎯 생명주기의 5가지 주요 상태
(애플 공식 문서 기준)
| 상태 | 설명 | 대표 시나리오 |
|---|---|---|
| Not Running (Unattached) | 앱이 실행되지 않거나 종료된 상태 | 앱을 처음 실행하기 전 |
| Inactive (Foreground inactive) | 앱이 실행 중이지만 이벤트를 받지 않는 상태 | 전화 수신, 알림 표시, 화면 전환 중 |
| Active (Foreground Active) | 앱이 정상적으로 동작 중인 상태 | 사용자가 화면을 조작 중일 때 |
| Background | 앱이 화면에 안 보이지만 코드 실행 가능 | 음악 재생, 위치 추적, 다운로드 진행 중 |
| Suspended | 앱이 메모리에 있지만 코드 실행 안 됨 | 시스템이 리소스 확보를 위해 대기 상태 |

각 scene(화면 인스턴스)의 생명주기 관리
UI 구성 및 표시 관리
scene 관련 이벤트 처리
1. 앱 시작 과정
AppDelegate의 application(_:didFinishLaunchingWithOptions:) 호출
시스템이 SceneDelegate객체 생성
scene(_:willConnectTo:options:) 호출 - 초기 UI 구성
sceneWillEnterForeground(_:) 호출
sceneDidBecomeActive(_:) 호출
2. 일반적인 생명주기 이벤트
활성화 상태 (Active):
sceneDidBecomeActive(_:)
앱이 foreground에 있고 사용자 이벤트를 받는 상태
비활성화 상태 (Inactive):
sceneWillResignActive(_:)
전화 수신, 알림 표시 등으로 일시적으로 중단된 상태
백그라운드 상태 (Background):
sceneDidEnterBackground(_:)
앱이 더 이상 보이지 않는 상태
종료 (Suspended):
3. Scene 연결 해제
sceneDidDisconnect(_:) 호출
시스템이 리소스를 확보하기 위해 scene을 임시로 제거할 때 발생
| 기능 | AppDelegate | SceneDelegate |
|---|---|---|
| 앱 시작 시 초기 설정 | ✓ | |
| Push 알림 처리 | ✓ | |
| Deep Link 처리 | ✓ | ✓ (화면 표시 담당) |
| Scene 생성/파괴 관리 | ✓ | |
| 화면 상태 관리 | ✓ | |
| 멀티 윈도우 지원 | ✓ |
사용자가 앱 아이콘을 길게 눌러 "새 윈도우 열기" 선택
시스템이 새로운 SceneDelegate 인스턴스 생성
새로운 scene에 대해 별도의 생명주기 호출 발생
각 scene은 독립적으로 Active/Inactive/Background 상태 전환
주의사항
iOS 12 이전 버전과의 호환성을 위해 Info.plist에 Application Scene Manifest 설정 필요
SceneDelegate를 사용하지 않으려면 Info.plist에서 관련 설정을 제거하고 AppDelegate에서만 생명주기 관리 가능
참고
https://developer.apple.com/documentation/uikit/managing-your-app-s-life-cycle