iOS
[iOS/SwiftUI] SwiftUI에서 @EnvironmentObject 설명 및 사용법
GODOLs
2023. 10. 11. 14:25
1. EnvironmentObject
란?
EnvironmentObject
는 SwiftUI의 데이터 흐름을 지원하는 하나의 툴입니다. 특정 데이터를 view 계층 구조 전체에 걸쳐서 전달하는데 사용됩니다. 그렇기 때문에 자식 뷰들이 부모 뷰에서 제공하는 데이터나 객체에 액세스할 수 있도록 해줍니다.
이를 사용하면 여러 뷰들 간에 데이터를 공유하거나 상태를 유지하는데 도움이 됩니다.
2. 사용 사례
예를 들어, 사용자 설정이나 인증 정보와 같은 앱 전체에서 사용될 수 있는 정보를 보관하고자 할 때 EnvironmentObject
를 사용할 수 있습니다.
3. 사용법
3.1. ObservableObject로 데이터 생성
먼저, EnvironmentObject
로 사용될 데이터나 객체는 ObservableObject
프로토콜을 준수해야 합니다.
class UserData: ObservableObject {
@Published var username: String = "Guest"
@Published var isLoggedIn: Bool = false
}
3.2. 상위 뷰에서 EnvironmentObject
제공
이제 EnvironmentObject
를 사용하여 UserData
객체를 뷰 계층에 제공하겠습니다.
struct ContentView: View {
@StateObject var userData = UserData()
var body: some View {
HomeView()
.environmentObject(userData) // HomeView 안의 자식뷰에서는 UserData를 어디든지 불러올 수 있습니다.
}
}
3.3. 하위 뷰에서 EnvironmentObject
사용
하위 뷰에서는 @EnvironmentObject
속성 래퍼를 사용하여 해당 객체에 액세스합니다.
struct HomeView: View {
@EnvironmentObject var userData: UserData
var body: some View {
VStack {
Text("Welcome, \(userData.username)")
Button(action: {
userData.isLoggedIn.toggle()
}) {
Text(userData.isLoggedIn ? "Log Out" : "Log In")
}
}
}
}
4. 주의 사항
EnvironmentObject
는 view 계층의 상위에서 제공되어야 합니다. 그렇지 않으면 런타임 오류가 발생할 수 있습니다.EnvironmentObject
는 참조 유형(reference type)인 클래스(Class)를 기반으로 해야합니다. 값 유형(value type)인 구조체(Struct)에는 사용할 수 없습니다.
5. 결론
EnvironmentObject
는 SwiftUI에서 데이터를 효과적으로 전달하고 관리하는 데 중요한 역할을 합니다. 하지만 올바르게 사용하기 위해서는 상위 뷰에서 제공하고, 필요한 모든 하위 뷰에서 해당 객체에 액세스하는 것을 잊지 말아야 합니다.
다음 포스팅에서는 Swift에서 앱 전역을 관리하는 Singleton과 EnvironmentObject의 차이를 설명하도록 하겠습니다.
반응형