iOS
[iOS/SwiftUI] @EnvironmentObject와 Singleton의 차이점
GODOLs
2023. 10. 11. 14:31
1. 목적:
- EnvironmentObject: SwiftUI view 계층 내에서 데이터를 공유하고 전달하는 목적으로 사용됩니다. 특정 뷰에서 제공되는 데이터나 상태를 자식 뷰들에게 전달하고 싶을 때 사용됩니다.
- 싱글톤: 앱 전체에서 하나의 인스턴스만 유지하고자 할 때 사용하는 디자인 패턴입니다. 앱의 여러 부분에서 동일한 정보나 설정, 리소스를 공유해야 할 때 사용됩니다.
2. 사용법:
- EnvironmentObject: 뷰 계층에서 .environmentObject(_:) 메서드를 사용하여 제공되고, @EnvironmentObject 속성 래퍼를 사용하여 해당 객체에 액세스합니다.
- 싱글톤: 특정 클래스에서 static shared 변수나 메서드를 통해 싱글톤 인스턴스에 액세스합니다.
1. EnvironmentObject 사용 예시
먼저, ObservableObject로 사용될 데이터 클래스를 생성합니다.
class UserSettings: ObservableObject {
@Published var username: String = "Guest"
}
뷰에서 EnvironmentObject를 사용하려면:
struct ContentView: View {
@EnvironmentObject var settings: UserSettings
var body: some View {
Text("Hello, \(settings.username)")
}
}
struct RootView: View {
var body: some View {
ContentView()
.environmentObject(UserSettings())
}
}
2. 싱글톤 사용 예시
싱글톤 클래스를 정의하려면:
class AppManager {
static let shared = AppManager()
var appVersion: String = "1.0"
private init() {} // 이 initializer는 private으로 설정하여 외부에서 인스턴스 생성을 방지합니다.
}
이 싱글톤에 액세스하려면:
let currentVersion = AppManager.shared.appVersion
참고:
EnvironmentObject는 뷰 계층의 특정 부분에 데이터를 주입하고 해당 데이터를 계층 내의 다른 뷰와 공유하는 데 사용됩니다.
싱글톤은 앱의 전체 수명 주기 동안 하나의 인스턴스만 존재하도록 보장하며, 앱의 여러 부분에서 공유되는 데이터나 설정을 저장하고 액세스하는 데 사용됩니다.
이 두 가지 방법은 서로 다른 문제를 해결하도록 설계되었으므로, 앱의 특정 요구 사항에 따라 적절한 방법을 선택하는 것이 중요합니다.
3. 사용 시나리오:
- EnvironmentObject: 사용자 인증 정보, UI 테마 설정 등 뷰 계층에서 공유해야 하는 데이터를 전달하는데 사용됩니다.
- 싱글톤: 데이터베이스 연결, 로그 관리, 네트워크 연결 등 앱 전체에서 공유되어야 하는 리소스를 관리하는데 사용됩니다.
4. 생명 주기:
- EnvironmentObject: SwiftUI view 계층의 일부로써, 뷰가 소멸될 때 같이 소멸될 수 있습니다.
- 싱글톤: 앱의 생명 주기 동안 계속 유지됩니다. 일반적으로 앱이 종료될 때까지 싱글톤 인스턴스는 메모리에 남아 있습니다.
결론
EnvironmentObject와 싱글톤은 모두 데이터를 공유하고 관리하는 데 사용되지만, 사용 목적과 범위, 생명 주기 등 여러 측면에서 차이가 있습니다. 따라서 개발 중인 앱의 요구 사항에 따라 적절한 도구나 패턴을 선택하여 사용해야 합니다.
반응형