앱의 생명 주기는 앱이 실행되면서 겪는 상태 변화를 의미합니다. 이 생명 주기는 iOS 시스템에 의해 관리되며 앱이 사용되거나 백그라운드로 이동할 때마다 특정 이벤트가 발생합니다. 이를 통해 앱이 적절한 시점에 필요한 작업을 수행할 수 있도록 도와줍니다.
목차
앱의 생명 주기 상태
앱은 크게 다섯 가지 상태로 다음과 같이 나눌 수 있습니다.
•
Not Running
•
Inactive
•
Active
•
Background
•
Suspended
Not Running
앱 완전히 종료되어 실행되지 않고 있는 상태입니다.
Inactive
앱이 실행 중이지만 유저가 아무런 작업을 하지 않는 상태입니다(ex. 전화가 왔을 때 잠깐 멈추는 경우).
Active
앱이 실행 중이고 유저가 앱과 상호작용하는 상태입니다.
Background
앱이 화면에는 보이지 않지만 여전히 작업을 수행할 수 있는 상태입니다.
Suspended
앱이 백그라운드에서 실행되고 있지만 현재 어떤 작업도 하지 않는 상태입니다. 메모리 관리 차원에서 시스템이 앱을 이 상태로 두며 필요할 때 메모리에서 제거될 수 있습니다.
앱의 생명 주기 상태 변화를 알리는 메서드
특정 상태 변화가 일어날 때마다 시스템에 의해 호출되는 메서드들이 있습니다. 이 메서드들을 통해 적절한 타이밍에 특정 작업을 수행할 수 있습니다.
앱 실행 시 생명 주기
앱이 처음 실행될 때 Not Running → Inactive → Active 상태로 전환됩니다. 이 과정에서 호출되는 메서드들은 다음과 같습니다.
application(_:didFinishLaunchingWithOptions:)
앱이 처음 실행될 때 호출됩니다. 이 메서드는 앱의 초기 설정을 완료하고 화면을 띄우기 전에 필요한 작업들을 처리합니다.
applicationDidBecomeActive(_:)
앱이 활성화되었을 때 호출됩니다. 이 메서드는 앱이 사용자와 상호작용을 시작할 준비가 완료되었음을 의미합니다.
홈 화면으로 나갈 때 생명 주기
앱을 사용하다가 홈 버튼을 누르거나 다른 앱으로 전환하면 앱은 Active → Inactive → Background 상태로 전환됩니다. 이때 호출되는 메서드들은 다음과 같습니다.
applicationWillResignActive(_:)
앱이 Active 상태에서 Inactive 상태로 전환되기 직전에 호출됩니다. 이때 앱은 현재 진행 중이던 작업을 일시 중지하거나 필요한 데이터를 저장하는 등의 작업을 할 수 있습니다.
applicationDidEnterBackground(_:)
앱이 Background 상태로 들어가면 호출됩니다. 이 메서드도 데이터를 저장하는 작업을 하거나 백그라운드에서 계속해야 하는 작업을 처리할 수 있습니다.
재실행될 때 생명 주기
applicationWillEnterForeground(_:)
앱이 Background → Active 상태로 돌아올 때 호출됩니다. 이 시점에서 앱은 백그라운드에서 작업 중이던 내용을 복원할 준비를 할 수 있습니다.
applicationDidBecomeActive(_:)
앱이 Inactive → Active 상태로 돌아올 때 호출됩니다. 이 메서드는 앱이 다시 활성화되면서 사용자와 상호작용할 준비가 되었음을 의미합니다.
앱 종료 시 생명 주기
앱이 강제로 종료되거나 종료하면 앱은 Not Running 상태로 돌아갑니다. 이때 호출되는 메서드는 다음과 같습니다.
applicationWillTerminate(_:)
앱이 완전히 종료되기 직전에 호출됩니다. 즉, 앱이 Not Running 상태로 진입하기 전에 마지막으로 호출되는 메서드입니다. 주로 데이터를 저장하거나 종료 전에 처리해야 할 작업을 수행합니다. 예를 들어, 유튜브 앱이 강제 종료되거나 유저가 앱을 완전히 종료할 때 이 메서드가 호출됩니다. 이때 유튜브는 해당 유저의 시청 기록을 서버에 저장하거나 백그라운드에서 진행 중인 다운로드 작업을 중지하고 필요한 데이터를 모두 저장하여 앱이 안전하게 종료될 수 있도록 합니다.
앱의 생명 주기와 성능 최적화
앱의 생명 주기를 잘 이해하면 불필요한 리소스 낭비를 줄이고 성능을 최적화할 수 있습니다. 예를 들어, 유튜브 같은 앱에서 백그라운드로 전환될 때 동영상 재생을 멈추고 앱이 다시 활성화될 때 필요한 리소스만 로드하면 배터리 소모를 줄일 수 있습니다. 또한 백그라운드 상태에서 너무 많은 작업을 수행하면 앱이 강제로 종료될 수 있으므로 효율적인 메모리 관리도 중요합니다.