[iOS] 앱의 생명주기 이해하기(App's Life Cycle)

2021. 12. 29. 03:14Programming/iOS_Swift

앱의 생명주기란?

  간단하게 이해해보자면 앱의 생명주기란, 어떠한 앱이 실행(Active)되고 중단되는(Suspend) 등 앱의 상태와 관련된 모든 일련의 과정들을 뜻한다. 앱의 상태는 총 5가지로 구분된다. Not Running, Foreground InActive, Foreground Active, Suspended, Background(Running) 이렇게 구성되며, 각각은 유동적으로 움직인다.

Scene-based Life-Cycle(씬 기반 생명주기)

  위의 그림을 통해 설명하면, 최초에 앱이 실행되면 런치스크린이 켜지고 앱은 Foreground InActive상태가 된다. 이후 앱의 UI가 나오고 앱은 Foreground Active 상태가 된다. 앱을 사용하다가 앱을 잠시 끄기 위해 홈버튼을 누르게 되면, 앱은 다시 Foreground InActive 상태가 되었다가 바로 Background상태가 된다. 만약 백그라운드 상태에서 앱이 계속 실행되어야할만한 일(ex. 메일 전송, 타이머 기능 등)이 없다면 앱은 Suspended상태가 될 것이다. 서스펜디드 상태가 되었다고 해서 앱이 완전히 꺼진 것(Not Running)은 아니다. 사용자가 언제든 다시 앱을 키면 앱은 다시 액티브 상태가 된다.

  그런데 만약 서스펜디드 상태인 앱이 너무 많아서 메모리가 부족한 상황이라면 OS는 메모리 확보를 위해 서스펜디드 상태인 앱들을 꺼버릴 수도 있다. 그럴 경우에 앱은 Not Running상태가 된다.

 

iOS 12 이전과 iOS 13 이후 앱의 생명주기 차이점

  가장 큰 차이점은 앱의 생명주기를 담당하는 클래스가 달라졌다. iOS 12 이전에는 Appdelegate 클래스에서 앱의 생명주기와 관련된 메서드들을 담당했지만 iOS 13이후로 Scenedelegate 클래스가 생겼고 앱의 생명주기(씬 생명주기) 역할을 씬딜리게이트가 가져갔다.

  가져가게된 이유는 간단하다. iOS 13부터 아래 그림처럼 아이패드 같이 화면이 큰 기기에서 하나의 앱으로 여러개의 씬을 보여주는게 가능해졌기 때문이다.

  iOS 12이전에는 앱에는 오직 하나의 씬(윈도우)만이 존재했기 때문에 앱 딜리게이트에서 앱의 생명주기 메서드들을 담당해줄 수 있었다. 그러나, 13 이후로, 한 앱의 여러 개의 씬을 동시에 보여주게 되면서 각 씬의 생명주기를 같이 표현해줄 필요성이 생겨난 것이다. 따라서, 해당 역할을 새롭게 생겨난 씬델리게이트가 담당하게 된다!

 

왜 알아야 할까?

  사실 앱을 개발하면서 여러 개의 씬을 보여주지 않을 것이라면, 몰라도 되는 개념이라는 생각이 들지만😅 교양적인 차원에서 꼭 알아야 하는 개념이다. 특히, 매번 프로젝트 만들때마다 만들어지는 파일인 Scenedelegate가 무슨 역할을 하는 클래스인지 대략적으로 알 수 있고, 앱의 기본적인 구동 사이클을 알 수 있다는 점에서 매우 유의미하다!

 

** 왜 알아야 할까? 부분은 현재까지 제가 느낀 사견이기 때문에, 틀릴 수도 있습니다. 내용이 잘못됐다면 언제든 지적해주세요!