iOS App은 여러개의 View Controller로 구성되어 있다.
근데 이 View Controller들은 각각의 생명주기를 갖고 있다.
생명주기는 도대체 뭐고, 왜 필요한건지 알아보자!
화면의 나타나고 사라지는 시점들을 단계별로 나타낸 것을 의미한다.
View! 화면을 보여줘야한다.
하지만 모바일 화면은 작고? 보여줄 건 많다!
그러니까 각각의 화면들이 보여졌다 사라졌다 하면서 상호작용을 해야하는데
어느 시점에 어떤 정보를 전달해야하는지가 중요하다.
만약 정보는 나타낼 준비가 안됐는데 냅다 배경이나 버튼만 등장해버리면 안되니까!
그렇기 때문에 각 뷰의 라이프 사이클을 고려하여 로직을 구성해야 한다.
그림을 보면서 한번 더 설명해보겠다.
먼저 공식문서의 전체 생명 주기를 살펴보면
나타나는 중, 나타남, 사라지는 중, 사라짐의 상태별로 호출되는 메서드 명이 써있다.
상태에 대한 부분만 순서대로 정렬해보면 이런 느낌이다.
색칠된 부분을 위주로 자세히 살펴보자!
프로젝트 생성하면 이미 적혀있는 익숙한 이 메서드..!
이름에서 알 수 있듯이 view가 load된 상태에서 시스템에 의해 자동으로 한번만 호출된다.
초기 화면을 구성하거나 리소스를 초기화 하는 용도로 주로 사용한다.
화면이 나타나기 직전에 항상 실행되는 메서드이다.
쉽게 말해서 다른 화면에 잠깐 이동했다가 다시 돌아올 때마다 실행된다.
왜 굳이 viewDidLoad
와 viewWillAppear
을 따로 나눴을까?
그 이유는 하나의 네비게이션 안에 여러 View가 Stack 구조로 담겨 하나의 화면으로 표시되기 때문이다.
위 이미지처럼 1. 설정(rootView) > 2. 일반 > 3. 소프트웨어 업데이트 메뉴로 진입하면
1, 2, 3 번 모두viewDidLoad
와 viewWillAppear
를 차례로 실행하면서
설정 View 위에 일반 View 그 위에 소프트웨어 업데이트 View 가 차곡차곡 push
된다.
반대로 네비게이션 바 메뉴를 눌러 이전화면으로 갈때는 pop
이 된다!
3번이 pop 되는 시점에서 2번은 이미 viewDidLoad
되었기 때문에 viewWillAppear
만 실행된다.
그리고 2번이 pop 될 때에도 1번은 viewWillAppear
만 실행되는 것을 확인할 수 있다.
이를 통해 stack의 구조와 같이 네비게이션 바가 동작하고 있다는 것을 알 수 있다.
그러니까! 어차피 1번이 pop되지 않는 이상 최초 실행시 딱 한번만 존재해도 되는 코드는 반복될 필요가 없다.
하지만 View가 사라진 후 다시 나타날 때 필요한 코드가 존재하므로 viewWillAppear
가 필요한 것이다.
뷰가 화면에 나타난 직후에 실행되는 메서드이다.
이때 애니메이션을 그린다.
뷰가 사라지기 직전에 실행되는 메서드이다.
뷰가 삭제되려고하는 것을 View Controller에 알리는 역할을 한다.
뷰가 사라지고 난 후 실행되는 메서드이다.
이 때는 단순하게 삭제가 됐음을 View Controller에 알린다.
위 5가지 단계를 거치며 각각의 뷰와 상호작용 하기 때문에
첫번째 뷰가 두번째 뷰로 넘어갈 때에는
뷰1 WillDisappear
> 뷰2 DidLoad
> WillAppear
> 뷰1 DidDisappear
이런 순서로 진행이 되고 반대로 두번째 뷰에서 첫번째 뷰로 되돌아 가는 과정도
뷰2 WillDisappear
> 뷰1 WillAppear
> 뷰2 DidDisappear
순서로 진행된다.
따라서 앱의 로직을 구성할 때
어떤 시점에 어떤 값을 넘겨야 자연스럽게 구현이 되는지 주의하는게 중요한 포인트라고 할 수 있겠다!