SwiftUI의 View 라이프사이클은 UIKit과는 다르게 선언형 프로그래밍 방식에 기반하며, View의 상태 및 데이터 변화에 따라 자동으로 업데이트됩니다.
따라서 SwiftUI에서는 명시적으로 생명주기 메서드를 정의하지 않지만, 몇 가지 중요한 개념과 제공되는 메서드 및 프로퍼티를 통해 생명주기를 관리할 수 있습니다.
1. View 생성 및 초기화
SwiftUI에서는 View는 데이터와 상태에 따라 필요할 때마다 다시 생성됩니다. View는 구조체이기 때문에 값 타입으로 동작하며, 무겁지 않은 생성 및 파괴가 가능합니다.
주요 특징:
- View는 데이터(상태)가 변경될 때마다 새로 렌더링됩니다.
- 뷰는 상태를 기반으로 UI를 업데이트하기 때문에 명시적인 업데이트 호출이 필요 없습니다.
2. View의 상태 관리
SwiftUI는 상태를 관리하기 위해 여러 프로퍼티을 제공합니다.
속성 앞에 프로퍼티 래퍼(property wrapper)를 사용하여 이 프로퍼티가 어떤 목적의 프로퍼티인지 설명합니다.
상태 관리 속성:
- @State: View 내부에서 상태를 관리하고, 상태가 변경되면 해당 View가 다시 렌더링됩니다. 값 타입(Value Type) 데이터를 관리합니다.
- @Binding: 부모 View로부터 전달받은 상태를 하위 View에서 공유 및 수정할 수 있습니다. 상태를 복사하지 않고 참조로 연결합니다.
- @StateObject: View에서 특정 객체를 초기화하고, 해당 객체의 상태를 관리합니다.
- @ObservedObject: 외부 객체에서 상태를 관찰하여 View를 업데이트합니다.
- 주의: @StateObject는 View가 새로 생성될 때마다 객체를 초기화하기 때문에, 같은 객체를 여러 View에서 공유하려면 @ObservedObject 또는 @EnvironmentObject를 사용해야 합니다.
- @EnvironmentObject: 환경적으로 공유되는 데이터를 사용하여 View를 업데이트합니다.
- @Environment: SwiftUI에서 기본 제공하는 환경 값을 읽습니다. 예: ColorScheme, Locale, Calendar 등.
property wrapper에 대해서는 추후에 추가적인 포스트를 작성하겠습니다!
3. View의 생명주기와 관련된 메서드
SwiftUI에서는 명시적인 생명주기 메서드 대신, 다음 메서드와 모디파이어를 사용해 View의 특정 시점에 작업을 처리할 수 있습니다.
1) onAppear
View가 화면에 나타날 때 실행됩니다.
.onAppear {
// some action
}
2) onDisappear
View가 화면에서 사라질 때 실행됩니다.
.onDisappear {
// some action
}
4. UIKit과의 차이점
- UIKit에서는 명시적으로 viewDidLoad, viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear 등의 메서드를 호출하여 생명주기를 관리합니다.
- SwiftUI에서는 상태 기반 접근 방식을 사용하며, 뷰의 업데이트 및 생명주기 이벤트가 데이터 변화에 따라 자동으로 처리됩니다.