Search

뷰 컨트롤러의 생명주기

목차

 init

뷰가 생성되기 전에 초기화가 필요한 설정을 처리하는 첫 단계입니다. 예를 들어, init(coder:), init(nibName:bundle:), init() 등이 있습니다.
init(coder:)
스토리보드를 이용해 뷰 컨트롤러를 생성할 때 사용됩니다. 이때 스토리보드 파일에 정의된 UI 요소들이 자동으로 인스턴스화됩니다.
init(nibName:bundle:)
nib 파일을 통해 뷰 컨트롤러를 생성할 때 호출됩니다. 코드 기반으로 뷰를 생성하지 않고 nib 파일에서 UI 요소를 가져와 사용해야 할 때 사용됩니다.
init()
코드로만 UI를 구성할 때 호출되는 메서드입니다. 커스텀 파라미터를 추가할 수 있습니다.

loadView

뷰 컨트롤러의 뷰를 직접 생성할 때 사용되는 메서드입니다. 기본적으로 UIKit은 뷰 컨트롤러를 생성할 때 자동으로 뷰를 생성해줍니다. 하지만 커스텀 뷰를 직접 구성하고 싶을 때 이 메서드를 오버라이드해서 사용합니다. 코드베이스로 UI를 구성할 때 다음과 같이 사용해야 합니다.
private let detailView = DetailView() override func loadView() { view = detailView }
Swift
복사
뷰 컨트롤러의 뷰가 메모리에 로드되기 전에 호출됩니다. 즉, 아직 화면에 표시될 뷰가 없을 때 이 메서드가 호출되어 뷰를 생성하고 설정합니다.

viewDidLoad

화면이 처음으로 메모리에 로드된 직후에 호출됩니다. 쉽게 말해, 화면을 구성하는 모든 UI 요소들이 메모리에 올라오고 나서 그 다음 단계로 호출하는 메서드입니다. 또한, 뷰 컨트롤러의 뷰가 최초로 메모리에 로드될 때 한 번만 호출됩니다. 즉, 화면에 처음 만들어질 때 한 번만 호출되고 그 이후에는 호출되지 않습니다. 만약 다시 그 화면으로 돌아오더라도 이미 메모리에 로드된 상태이므로 viewDidLoad는 다시 호출되지 않고 viewWillAppearviewDidAppear가 호출됩니다.
loadView와 viewDidLoad 차이점 한눈에 보기
메서드
호출 시점
역할
사용 목적
loadView()
뷰 컨트롤러의 뷰가 메모리에 로드되기 전
뷰 컨트롤러의 뷰를 직접 생성
커스텀 뷰를 직접 코드로 구성할 때 사용
viewDidLoad()
뷰 컨트롤러의 뷰가 메모리에 로드된 후
뷰가 생성된 후에 추가 설정 작업을 처리
데이터 로드, 이벤트 설정, UI 업데이트 등

viewWillAppear

뷰가 화면에 나타나기 직전에 호출되는 메서드입니다. 즉, 뷰가 사용자에게 보이기 바로 전의 상태에서 실행됩니다. 이 메서드는 viewDidLoad와는 다르게 한 번만 호출되는 것이 아닌 화면이 다시 나타날 때마다 계속 호출됩니다. 예를 들어, 내비게이션 스택을 사용해서 화면 A → 화면 B로 이동했다가 다시 화면 A로 돌아올 때도 viewWillAppear가 호출됩니다. 따라서 화면이 다시 나타날 때마다 필요한 작업을 여기에서 할 수 있습니다.

viewDidAppear

뷰가 화면에 완전히 나타난 후 호출되는 메서드입니다. 즉, 유저가 화면을 볼 수 있게 되었을 때 실행되는 메서드입니다. 예를 들어, viewDidAppear는 다음과 같은 상황에서 필요합니다.
애니메이션 시작: 화면이 완전히 나타나기 전에 애니메이션을 시작하면 부자연스러울 수 있기 때문에 화면이 완전히 나타난 후 애니메이션을 적용하면 자연스럽게 시작할 수 있습니다.

viewWillDisappear

뷰가 화면에서 사라지기 직전에 호출되는 메서드입니다. 즉, 유저가 뒤로 가기 버튼을 눌러 현재 화면을 닫을 때 이 메서드가 호출됩니다.

viewDidDisappear

뷰가 화면에서 완전히 사라진 후에 호출되는 메서드입니다. 이 메서드는 특정 뷰가 더 이상 화면에 표시되지 않을 때 어떤 작업을 처리해야 할 때 유용합니다.

deinit

클래스 인스턴스가 메모리에서 해제될 때 자동으로 호출되는 소멸자입니다. 즉, 앱이 완전히 종료된 경우나 뷰가 화면에서 완전히 사라질 때 호출됩니다.

실습

앱을 실행하고 ViewController가 표시될 때 호출되는 메서드
ViewController에서 DetailViewController로 화면 전환했을 때 호출되는 메서드
뒤로 가기 버튼을 눌러 ViewController로 화면 전환했을 때 호출되는 메서드
앱이 완전히 종료되었을 때 호출되는 메서드