[Swift] iOS 앱의 생명주기(Lifecycle) 이벤트를 이해하고 처리하는 방법

Oni·2023년 10월 27일
0

기술면접

목록 보기
4/13
post-thumbnail

1. 앱의 생명주기

iOS 앱의 생명주기는 앱이 실행 중인 동안 발생하는 여러 가지 상태와 이벤트를 나타낸다. 앱은 여러 상태로 전환되며, 각 상태 전환 시에는 특정 이벤트가 발생한다. iOS 앱의 주요 생명주기 이벤트와 각 이벤트에서 수행할 수 있는 작업은 아래와 같다.

1-1. Not Running (미실행 상태)

  • 앱이 실행되지 않은 상태입니다.

1-2. Inactive (비활성 상태)

  • 앱이 포어그라운드에 있지만, 이벤트를 받지 않는 상태

1-3. Active (활성 상태)

  • 앱이 활성화되어 사용자와 상호작용할 수 있는 상태
  • 이때 앱이 포어그라운드에 있음

1-4. Background (백그라운드 상태)

  • 앱이 백그라운드로 이동한 상태
  • 사용자는 앱을 떠나고 다른 앱을 사용하거나 홈 화면으로 이동할 때 이 상태가 됨
  • 백그라운드 상태에서 앱은 일부 작업을 수행할 수 있음 (ex: 위치 업데이트, 알림 수신, 데이터 다운로드 등)

1-5. Suspended (일시 중지 상태)

  • 앱이 메모리에서 제거된 상태이지만 여전히 백그라운드에 남아 있음
  • 이 상태에서 앱은 코드를 실행하지 않음
  • 시스템은 앱을 일시 중지 상태로 보내어 메모리를 확보하고 배터리 소모를 줄임

iOS 앱의 생명주기 이벤트는 다양한 상황에서 앱의 동작을 제어할 수 있도록 해준다. 앱이 특정 상태로 전환될 때 발생하는 이벤트에 대한 처리를 잘 구현함으로써 사용자 경험을 향상시킬 수 있다.
개발자는 앱 델리게이트(App Delegate)와 Scene 델리게이트(Scene Delegate) 메서드를 활용하여 각 상태에 따른 이벤트를 처리할 수 있다.
이를 통해 앱이 사용자와 원활하게 상호작용하고, 시스템 리소스를 효율적으로 관리할 수 있다.


2. 이벤트 처리

iOS 앱의 생명주기 이벤트를 이해하고 처리하는 것은 앱을 개발하는 데 매우 중요한 부분이다. iOS 앱은 여러 가지 상태를 가지며, 각 상태에 따라 특정 이벤트가 발생한다.
아래는 주요 iOS 앱 생명주기 이벤트와 그에 대한 처리 방법이다.

2-1. 앱 시작 (App Launch)

앱이 처음 실행될 때 발생하는 이벤트다.
application(_:didFinishLaunchingWithOptions:) 메서드를 사용하여 앱이 시작될 때 필요한 초기 설정을 수행할 수 있다.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 앱 시작 시 초기 설정 수행
    return true
}

2-2. 백그라운드로 이동 (App in Background)

홈 버튼을 눌러 앱을 백그라운드로 이동할 때 발생하는 이벤트다.
applicationDidEnterBackground(_:) 메서드를 사용하여 앱이 백그라운드로 이동했을 때 처리할 작업을 수행할 수 있다.

func applicationDidEnterBackground(_ application: UIApplication) {
    // 앱이 백그라운드로 이동했을 때 실행할 코드
}

2-3. 포어그라운드로 이동 (App in Foreground)

앱이 백그라운드에서 포어그라운드로 이동할 때 발생하는 이벤트다.
applicationWillEnterForeground(_:) 메서드를 사용하여 앱이 포어그라운드로 이동할 때 처리할 작업을 수행할 수 있다.

func applicationWillEnterForeground(_ application: UIApplication) {
    // 앱이 포어그라운드로 이동했을 때 실행할 코드
}

2-4. 앱 종료 (App Termination)

앱이 종료될 때 발생하는 이벤트다.
applicationWillTerminate(_:) 메서드를 사용하여 앱이 종료되기 전에 처리할 작업을 수행할 수 있습니다.

func applicationWillTerminate(_ application: UIApplication) {
    // 앱이 종료될 때 실행할 코드
}

또한, iOS 13부터는 Scene Delegate가 도입되어 멀티 윈도우 및 멀티 태스킹을 지원한다. Scene Delegate를 사용하면 각 윈도우와 해당 뷰 컨트롤러의 생명주기 이벤트를 관리할 수 있다.
Scene Delegate를 사용하는 경우에는 scene(:willConnectTo:options:), sceneWillResignActive(:), sceneDidEnterBackground(:), sceneWillEnterForeground(:), sceneDidBecomeActive(:), sceneWillDisconnect(:) 등의 메서드를 사용하여 각 상태에 대한 처리를 할 수 있다.

앱의 요구사항에 맞게 적절한 생명주기 이벤트 메서드를 구현하고, 각 이벤트에 대한 처리를 정확하게 구현함으로써 사용자 경험을 향상시킬 수 있다.

profile
하지만 나는 끝까지 살아남을 거야!

0개의 댓글