[iOS] LifeCycle 에 대하여

kpk0616·2022년 8월 24일
0

iOS

목록 보기
1/4
post-thumbnail

네이버 부스트코스 강의를 수강하다가 LifeCycle 개념에 대해 알아야 할 필요성을 느끼게 되었습니다.
대충 앱이 실행되고 어떻게 동작하는지에 대한 사이클을 나타내는 개념이라는 것은 알고 있는데, 검색을 해 보니 안드로이드 / React / iOS 에서 나타내는 LifeCycle 이 각각 다른 특징을 가진 것 같았습니다. 뿐만 아니라 어느 포스팅에서든 LifeCycle 을 아는 것이 중요하다고 강조를 하는데, 정확히 어떤 개념이고 어느 포인트에서 중요한지를 알아야겠다는 생각이 들었습니다.

    // MARK: Life Cycle
    override func viewDidLoad() {
        super.viewDidLoad()
        self.initializePlayer()
    }

LifeCycle 이란?

라이프사이클은 생명주기, 생애주기라는 사전적 의미를 가지고 있습니다.
소프트웨어공학에서 의미하는 라이프사이클은 프로젝트 라이프사이클, 소프트웨어 배포 라이프사이클, 소프트웨어 개발 라이프사이클 등이 있습니다.
모바일 앱에서는 앱, 화면에서도 생명주기가 있는데, 홈 화면을 눌렀을 때 어플이 종료되지 않고 대기하거나 뒤로가기를 두 번 눌렀을 때 앱이 종료되는 등이 이에 해당됩니다.

iOS LifeCycle

state

모든 iOS 앱은 LifeCycle 에 따라 동작하므로, 개발자들은 애플리케이션의 동작을 이해하기 위해 LifeCycle 에 대해 숙지해야 할 필요가 있습니다.

  1. Not Running : 앱이 아직 시작되지 않았거나 시스템 혹은 유저에 의해 종료되었을 때의 상태를 의미합니다.
  2. Inactive : 앱이 실행된 상태이지만 이벤트를 받지 못하는 경우를 의미합니다. 앱이 다른 상태로 전환하기 위해 잠시 머무는 브릳지 상태라고 할 수 있습니다.
  3. Active : 앱이 실행되어 있으며 유저 이벤트를 받을 수 있는 평범한 앱의 상태를 의미합니다.
  4. Background : 유저가 홈 화면을 탭하거나 앱이 약간의 추가 실행 시간이 필요한 경우 background 상태로 전환됩니다. 앱이 일시정지된 상태에도 background 로 전환됩니다. 이 상태에서는 앱이 백그라운드에 남아 코드를 실행합니다.
  5. Suspended : 앱이 백그라운드에 남아 있지만 코드를 실행하지 않는 상태입니다. 앱은 자동으로 이 상태로 전환됩니다. suspended 상태가 되면 앱은 메모리에 남아 있으나 foreground 앱이 suspended 앱보다 항상 우선순위를 갖고 suspended 앱은 에고 없이 종료될 수 있습니다.

UIApplicationDelegate methods

iOS 앱은 UIApplicationDelegate 를 주축으로 빌드되고 실행됩니다.
UIApplicationDelegate 는 앱이 백그라운드 / 포그라운드로 이동, 푸시 알림 등과 같은 여러 사용자 이벤트를 알리기 위해 애플리케이션이 구현해야 하는 프로토콜입니다.
UIApplicationDelegate 는 앱이 실행을 시작할 때 명시되는 app lifecycle method 를 포함합니다.
1. application: didFinishLaunchingWithOptions:-> Bool : 앱이 처음 시작될 때 호출되는 메소드입니다. 이 메소드를 이용해 firebase 구성, 유저 네비게이션 등 애플리케이션에 대한 초기 설정을 할 수 있습니다. 이 시점에서 스토리보드가 로드되지만, 상태 복원(state restoration) 을 유지할 수 있습니다.
2. applicationWillEnterForeground : didFinishLaunchingWithOptions 이 실행된 후에 호출되는 메소드입니다. 애플리케이션을 백그라운드에서 포그라운드로 불러오는 역할을 합니다.
3. applicationDidBecomeActive : applicationWillEnterForeground 이 실행된 후 호출되는 메소드입니다. 앱이 포그라운드로 나올 때 글꼴 업데이트 등과 같은 특정 작업을 수행해야 하는 경우 이 메소드 안에 코드를 배치시킬 수 있습니다.
4. applicationWillResignActive : 애플리케이션이 inactive 될 때에 실행되는(notified 되는) 메소드입니다. (ex : 유저가 전화를 받을 때, 유저가 홈 버튼을 누를 때)
5. applicationDidEnterBackground : 앱이 inactive 상태가 된 후 백그라운드 상태로 전환될 때 실행되는(notified 되는) 메소드입니다.
6. applicationWillTerminate : 앱이 메모리에서 최종적으로 종료될 때 호출되는 메소드입니다. 최종적인 클린업을 해야 하는 경우 이 메서드에 코드를 배치할 수 있습니다.

앱 실행 시 실행할 코드는 didFinishLaunchingWithOptions 메서드 안에 배치할 수 있습니다. 예를 들어 앱 사용을 위해 유저 로그인을 필요로 하는 앱에서 유저가 이비 로그인했는지를 UserDefaults 를 체크하는 것을 통해 확인할 수 있습니다. 만약 유저가 이미 로그인 한 상태라면 유저를 홈 스크린으로 이동시키고, 그렇지 않다면 로그인 화면으로 이동시키도록 말이지요.

참고

profile
가능한 한 빨리 틀렸음을 증명하려고 노력합니다.그래야만 발전을 찾을 수 있기 때문입니다.

0개의 댓글