앱 생명주기 (App Lifecycle)

김재우·2025년 3월 24일

📱 iOS 앱 생명주기의 정의

"앱이 실행부터 종료까지 거치는 다양한 상태(State)전환(Transition) 과정"

👉 핵심 개념

  • 시스템이 메모리, 배터리, 사용자 경험을 위해 앱의 상태를 자동으로 관리

  • 개발자는 각 상태 전환 시 필요한 작업을 적절히 처리해야 함 (예: 데이터 저장, 리소스 정리)

iOS 13+부터는 UISceneDelegate로 생명주기 관리 (멀티 윈도우 지원)

iOS 12 이하는 UIApplicationDelegate에서 처리하기 때문에 iOS 13+ 기준으로 알아보도록 하겠다.

🎯 생명주기의 5가지 주요 상태
(애플 공식 문서 기준)

상태설명대표 시나리오
Not Running
(Unattached)
앱이 실행되지 않거나 종료된 상태앱을 처음 실행하기 전
Inactive
(Foreground inactive)
앱이 실행 중이지만 이벤트를 받지 않는 상태전화 수신, 알림 표시, 화면 전환 중
Active
(Foreground Active)
앱이 정상적으로 동작 중인 상태사용자가 화면을 조작 중일 때
Background앱이 화면에 안 보이지만 코드 실행 가능음악 재생, 위치 추적, 다운로드 진행 중
Suspended앱이 메모리에 있지만 코드 실행 안 됨시스템이 리소스 확보를 위해 대기 상태

SceneDelegate의 주요 역할

  1. 각 scene(화면 인스턴스)의 생명주기 관리

  2. UI 구성 및 표시 관리

  3. scene 관련 이벤트 처리

Scene 기반 생명주기 흐름

1. 앱 시작 과정

  1. AppDelegateapplication(_:didFinishLaunchingWithOptions:) 호출

  2. 시스템이 SceneDelegate객체 생성

  3. scene(_:willConnectTo:options:) 호출 - 초기 UI 구성

  4. sceneWillEnterForeground(_:) 호출

  5. sceneDidBecomeActive(_:) 호출

2. 일반적인 생명주기 이벤트

  • 활성화 상태 (Active):

    • sceneDidBecomeActive(_:)

    • 앱이 foreground에 있고 사용자 이벤트를 받는 상태

  • 비활성화 상태 (Inactive):

    • sceneWillResignActive(_:)

    • 전화 수신, 알림 표시 등으로 일시적으로 중단된 상태

  • 백그라운드 상태 (Background):

    • sceneDidEnterBackground(_:)

    • 앱이 더 이상 보이지 않는 상태

  • 종료 (Suspended):

    • 시스템에 의해 자동으로 처리 (명시적 메서드 없음)

3. Scene 연결 해제

  • sceneDidDisconnect(_:) 호출

  • 시스템이 리소스를 확보하기 위해 scene을 임시로 제거할 때 발생

AppDelegate와 SceneDelegate의 역할 분담

기능AppDelegateSceneDelegate
앱 시작 시 초기 설정
Push 알림 처리
Deep Link 처리✓ (화면 표시 담당)
Scene 생성/파괴 관리
화면 상태 관리
멀티 윈도우 지원

멀티 윈도우 시나리오 예시

  1. 사용자가 앱 아이콘을 길게 눌러 "새 윈도우 열기" 선택

  2. 시스템이 새로운 SceneDelegate 인스턴스 생성

  3. 새로운 scene에 대해 별도의 생명주기 호출 발생

  4. 각 scene은 독립적으로 Active/Inactive/Background 상태 전환

주의사항

  • iOS 12 이전 버전과의 호환성을 위해 Info.plistApplication Scene Manifest 설정 필요

  • SceneDelegate를 사용하지 않으려면 Info.plist에서 관련 설정을 제거하고 AppDelegate에서만 생명주기 관리 가능


참고
https://developer.apple.com/documentation/uikit/managing-your-app-s-life-cycle

profile
iOS 스타터 6기

0개의 댓글