iOS/Swift

iOS 앱의 생명주기(App Life Cycle)에 대해 설명해주세요.

밤새는 탐험가89 2024. 8. 16. 12:07

 

iOS 앱의 생명주기

앱이 포그라운드 또는 백그라운드에 있을 때 시스템 알림에 응답하고 다른 중요한 시스템 관련 이벤트를 처리합니다.

 

 

  1. Unattached (분리됨):
    • 앱이 아직 실행되지 않은 상태입니다.
    • 마치 잠들어 있는 상태와 비슷합니다.
    • 이 단계에서는 아무 작업도 할 수 없습니다.
  2. Foreground Inactive (전면 비활성):
    • 앱이 화면에 보이지만 아직 사용자 입력을 받지 않는 상태입니다.
    • 알람이 울려 막 깨어난 상태와 비슷합니다.
    • 이 단계에서 할 수 있는 일:
      • 화면 구성 요소 준비 (예: 아침에 옷 고르기)
      • 필요한 데이터 로드 (예: 오늘의 일정 확인하기)
  3. Foreground Active (전면 활성):
    • 앱이 완전히 활성화되어 사용자와 상호작용할 수 있는 상태입니다.
    • 깨어나서 하루를 시작한 상태와 비슷합니다.
    • 이 단계에서 할 수 있는 일:
      • 사용자 입력 처리 (예: 메시지에 답장하기)
      • 애니메이션 실행 (예: 운동하기)
      • 네트워크 요청 (예: 친구에게 전화하기)
  4. Background (배경):
    • 앱이 화면에 보이지 않지만 여전히 작업을 수행할 수 있는 상태입니다.
    • 잠들어 있지만 꿈을 꾸는 상태와 비슷합니다.
    • 이 단계에서 할 수 있는 일:
      • 데이터 동기화 (예: 잠들어 있어도 심장이 뛰는 것처럼)
      • 위치 업데이트 (예: 수면 중 몸의 위치가 바뀌는 것처럼)
      • 음악 재생 (예: 백색 소음을 들으며 자는 것처럼)
  5. Suspended (일시 중단):
    • 앱이 메모리에 남아 있지만 아무 작업도 수행하지 않는 상태입니다.
    • 깊은 잠에 빠진 상태와 비슷합니다.
    • 이 단계에서는 작업을 수행할 수 없습니다.

앱은 이러한 상태들 사이를 필요에 따라 전환합니다. 예를 들어:

  • 앱을 실행하면 Unattached → Foreground Inactive → Foreground Active로 전환됩니다.
  • 홈 버튼을 누르면 Foreground Active → Background → Suspended로 전환될 수 있습니다.
  • 알림을 받으면 Foreground Active → Foreground Inactive → Foreground Active로 잠시 전환될 수 있습니다.

각 전환 시점에 적절한 작업을 수행하도록 앱을 설계하면, 사용자에게 더 나은 경험을 제공할 수 있습니다.

예를 들어, Background 상태로 전환될 때 중요한 데이터를 저장하거나, Foreground Active 상태로 돌아올 때 최신 정보를 로드하는 등의 작업을 수행할 수 있습니다.

 

 

iOS 앱의 생명주기를 하루 동안의 사람의 활동과 비교해 볼 수 있습니다:

  1. Not Running (잠자는 상태):
    • 앱이 아직 시작되지 않았거나 완전히 종료된 상태입니다.
    • 마치 여러분이 깊은 잠에 빠진 것과 같습니다.
  2. Inactive (막 일어난 상태):
    • 앱이 실행 중이지만 아직 사용자 입력을 받지 않는 상태입니다.
    • 알람이 울려 깼지만 아직 눈을 비비고 있는 상태와 비슷합니다.
  3. Active (활발히 활동하는 상태):
    • 앱이 화면에 표시되고 사용자와 상호작용하는 상태입니다.
    • 여러분이 하루 동안 열심히 일하거나 활동하는 것과 같습니다.
  4. Background (백그라운드 작업 상태):
    • 앱이 화면에 보이지 않지만 여전히 일부 작업을 수행하는 상태입니다.
    • 잠들기 전 알람을 맞추거나, 잠든 동안에도 심장이 뛰는 것과 비슷합니다.
  5. Suspended (일시 정지 상태):
    • 앱이 백그라운드에 있지만 아무 작업도 하지 않는 상태입니다.
    • 깊은 잠에 빠져 있지만 언제든 깨어날 수 있는 상태와 유사합니다.

 

 

iOS 13 이후 scene-based life cycle events

iOS 13 기점으로 이전에는 life-cycle events를 AppDelegate에서 모두 다뤘지만,

iOS 13 이후에는 SceneDelegate가 등장하는데, 

앱의 생명주기와 프로세스 이벤트는 여전히 AppDelegate가 관리하지만, 

UI 생명주기는 새로운 SceneDeelgate가 담당한다. 

 

 

 

한 개의 Scene은 사용자가 기기에서 실행하는 앱의 UI를 나타내는 하나의 인스턴스를 뜻합니다. 

이 전에는 1개의 앱이 1개의 인스턴스를 가지고 있기 때문에, 앱이 실행 중인 동안에는 1개의 UI만 사용할 수 있습니다. 

iOS 이후부터는 멀티플 윈도우를 지원하면서 하나의 앱이 여러 개의 Scene 인스턴스를 가질 수 있습니다. 

 

 

각 Scene은 자체적으로 생명주기를 갖고 있고, 앱은 1개 이상의 SceneDelegate를 가질 수 있게 구성됨으로써 이를 통해 각 Scene은 독립적으로 UI 상태를 관리하고, 사용자는 멀티 윈도우 환경을 제공 받을 수 있습니다. 

 

 

주요 변화:

  1. 멀티태스킹 지원 향상: 하나의 앱이 여러 장면을 동시에 활성화할 수 있습니다.
  2. 더 세밀한 제어: 각 장면의 상태를 개별적으로 관리할 수 있습니다.
  3. 향상된 사용자 경험: 아이패드에서 같은 앱의 여러 인스턴스를 동시에 실행할 수 있습니다.

예를 들어, iOS 13 이후에는 메모 앱의 두 개의 다른 노트를 분할 화면으로 동시에 볼 수 있습니다. 각 노트는 독립적인 장면으로 처리되며, 각각 자신만의 생명주기를 가집니다.

 

하지만 iOS 13 이전 버전과의 호환성을 위해, 애플은 두 시스템을 모두 지원합니다.

개발자는 앱의 최소 지원 버전에 따라 적절한 방식을 선택하거나 두 방식을 모두 구현할 수 있습니다.