# [Swift - UIKit] UIViewController에서의 View life Cycle API

![Image](https://upload.cafenono.com/image/slashpagePost/20240524/133658_kL836gdJx7usQKTse1?q=75&s=1280x180&t=outside&f=webp)

UIViewController에서 View 객체를 로드하고 (그리고) 어떤 페이지로 전환되어 그 객체가 사라지는 과정을 관리하는 시스템을 내가 학습하기로는 View Life Cycle 이라고 한다. View 객체의 생명주기를 관리하는 UIViewController 클래스의 내장 오픈 메서드(API라고 부르겠다)는 여러가지가 있지만, 대표적으로 위 이미지의 5가지가 대표적일 것 같다. 

- viewWillAppear

- viewIsAppearing

- viewDidAppear

- viewWillDisappear

- viewDidDisappear

사실, API의 prefix에 붙은 키워드만 보더라도 View 객체가 어떤 상태일지에 따라 서로 다른 API가 동작한다는 것을 쉽게 유추해 볼 수 있을 것 같다. (will, -ing, did) 모달이나 페이지 전환에 따라 특정 View 객체가 어떤 생명 주기를 가지는지를 각 API에 print 구문으로 확인해봤다.

1. XCode로 앱을 처음 빌드할 때.

- UIController의 viewDidLoad가 가장 먼저 앱을 그리는 로직을 수행한다. 

- 그리고 나서 순서대로 willAppear → isAppearing → didAppear API가 호출된다. 
- (prefix 만으로도 쉽게 유추가 가능하다.)

![Image](https://upload.cafenono.com/image/slashpagePost/20240524/133443_MOmQ4eIrFqgEHE0Buc?q=75&s=1280x180&t=outside&f=webp)

1. 버튼 액션으로 모달 페이지가 떠오를 때.

![Image](https://upload.cafenono.com/image/slashpagePost/20240524/134521_0Xz20hdwAXfvpanu0l?q=75&s=1280x180&t=outside&f=webp)

- 앱 화면 하단에서 떠오른 모달 페이지가 직전 View를 가리더라도, 해당 View 객체 생명 자체를 사라지게 하지 않는다.

- 즉, 이전 화면을 완전히 가리지 않는다면 해당 View는 생명선을 유지한다는 뜻이다. 해당 모달을 내리더라도 willAppear, isAppearing, didAppear API가 콘솔에 전혀 찍히지 않는다.

- **모달 페이지에서 특정 액션을 발생시켜서 뒤에 있는 View에 어떤 화면 전환이 필요하면, 그걸 처리하는 로딩 로직을 만들어야 할 것 같다.**

1. 버튼 액션으로 페이지 자체가 전환될 때.

- 화면이 Push되어서 완전 새로운 화면이 이전 View를 가릴 경우, 해당 View 객체는 생명을 다한다.

- 순서대로 willDisAppear, didDisappear API가 호출된다.

- 즉, **화면이 전환될 경우는 화면이 꺼짐으로 발생하는 데이터 저장이나, 업데이트 로직이 해당 생명주기 API에서 처리되어야 할 것이다.**

![연결된 화면이 Push될 경우, 이전 View 객체는 생명을 다한다.](https://upload.cafenono.com/image/slashpagePost/20240524/134950_ZdBfwdKAgN0YtSObv7?q=75&s=1280x180&t=outside&f=webp)

![물론, 다시 화면으로 돌아오면 생명이 다시 붙는다. ](https://upload.cafenono.com/image/slashpagePost/20240524/135219_vyKHkGwBR9hV1sTdlf?q=75&s=1280x180&t=outside&f=webp)

For the site tree, see the [root Markdown](https://slashpage.com/hankyeol.md).
