Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Jupyo's Daily Story

ObservableObject 본문

SwiftUI

ObservableObject

JangJupyo 2020. 10. 15. 16:51
728x90
반응형

ObservableObject는 SwiftUI에서 클래스 기반 데이터를 관리하고, 해당 데이터가 변경될 때 자동으로 UI를 업데이트하는 중요한 프로토콜입니다. ObservableObject를 사용하면 SwiftUI의 반응형 구조에서 데이터를 효율적으로 관리할 수 있습니다.

 

ObservableObject란?

  • ObservableObject는 SwiftUI의 데이터 모델이 상태를 관리하고, 그 상태의 변화를 감시할 수 있게 해주는 프로토콜입니다.
  • 데이터가 변경될 때 자동으로 UI가 업데이트되도록 하기 위해 사용됩니다.
  • 보통 클래스 타입의 데이터 모델에서 사용되며, 이 모델을 감시하는 뷰가 자동으로 리렌더링됩니다.

 

사용 이유

  • ObservableObject는 상태가 자주 변경되는 클래스 기반 데이터를 관리할 때 유용합니다.
  • 이 프로토콜을 구현하면 데이터가 변경될 때 이를 감지하고 뷰를 업데이트할 수 있습니다.
  • SwiftUI의 반응형 시스템을 활용하여, 복잡한 데이터 흐름도 쉽게 관리할 수 있습니다.

 

@Published와 함께 사용

ObservableObject와 함께 자주 사용되는 것이 @Published 프로퍼티 래퍼입니다. @Published는 해당 프로퍼티의 값이 변경될 때 자동으로 변경을 알리며, 이를 감시하는 뷰가 업데이트됩니다.

import SwiftUI
import Combine

class UserSettings: ObservableObject {
    @Published var username: String = "Guest"
}
  • @Published는 username이 변결될 때 자동으로 변경 사항을 알립니다.
  • @ObservableObject@StateObject를 사용해 이 데이터를 감시하는 뷰가 자동으로 업데이트됩니다.

 

ObservableObject의 사용 예시

아래는 ObservableObject를 사용하는 기본적인 예시입니다.

import SwiftUI
import Combine

class CounterViewModel: ObservableObject {
    @Published var count = 0
    
    func increment() {
    	count += 1
    }
}

struct ContentView: View {
    @ObservedObject var viewModel = CounterViewModel()
    
    var body: some View {
    	VStack {
            Text("Count: \(viewModel.count)")
            	.padding()
			
            Button("Increment") {
            	viewModel.increment()
            }
        }
    }
}
  • CounterViewModel: @Published로 선언된 count는 값이 변경될 때 뷰가 자동으로 업데이트됩니다.
  • ContentView: @ObservedObject로 viewModel을 감시하고, 버튼 클릭 시 카운터가 증가하며 UI가 자동으로 변경됩니다.

 

@ObservedObject와의 연관성

ObservableObject는 @ObservedObject와 함께 사용되며, 뷰에서 외부 객체를 감시하는 데 사용됩니다.

@ObservedObject는 외부에서 전달받은 객체의 상태를 감시하고, 해당 객체의 값이 변경될 때 자동으로 뷰를 업데이트합니다.

struct ContentView: View {
    @ObservedObject var userSettings = UserSettings()
    
    var body: some View {
        VStack {
            Text("Username: \(userSettings.username)")
            Button("Change Username") {
                userSettings.username = "NewUser"
            }
        }
    }
}
  • userSettings가 업데이트될 때 자동으로 Text 뷰가 새로 고침됩니다.
  • @ObservedObject는 뷰가 객체의 상태를 감시하는 데 사용됩니다.

 

메모리 관리 및 성능

  • 객체의 상태를 감시하면서 UI를 업데이트하기 때문에 반응형 시스템에서 중요한 역할을 합니다.
  • ObservableObject와 @Published는 비동기적으로 데이터 변경을 감지하고 UI를 업데이트하므로, UI와 데이터의 일관성을 유지하는 데 도움이 됩니다.
  • @StateObject와 함께 사용하면 객체의 생명 주기도 관리할 수 있습니다.

 

ObservableObject와 StateObject의 차이

프로퍼티 래퍼 역할 객체 관리
ObservableObject 데이터 모델이 상태 변경을 알리도록 관리 외부에서 전달된 객체를 감시
@StateObject 뷰가 객체를 직접 생성하고 소유 객체의 생명 주기를 뷰가 소유

 

결론

  • ObservableObject는 SwiftUI에서 클래스 기반 데이터를 관리하고, 상태 변화에 따른 UI 업데이트를 자동으로 처리하는 핵심 도구입니다.
  • @Published와 @ObservedObject와 함께 사용하며, 데이터가 변경될 때 자동으로 UI를 업데이트하는 시스템을 쉽게 구현할 수 있습니다.

 

요약

  • ObservableObject는 클래스 기반 상태 관리를 위한 프로토콜입니다.
  • 상태 변화가 발생할 때 UI가 자동으로 업데이트됩니다.
  • @Published와 함께 사용하여, 값이 변경될 때 이를 자동으로 알림.
  • 뷰에서 객체를 감시할 때는 @ObservedObject를 사용합니다.
반응형

'SwiftUI' 카테고리의 다른 글

@Binding  (2) 2024.09.16
@StateObject  (0) 2020.10.15
@State  (0) 2020.10.15
@EnvironmentObject  (0) 2020.10.14
Spacing & Spacer  (0) 2020.10.13