STUDY/Swift & iOS

@StateObject @ObservedObject

sinawi95 2025. 2. 23. 00:16
728x90

generated by ChatGPT


@StateObject vs @ObservedObject 차이점

둘 다 ObservableObject를 사용하는 방법이지만, 어디서 데이터를 소유하고 관리하는지가 다릅니다.


1️⃣ @StateObject

  • 뷰에서 처음 생성된 ViewModel을 직접 소유
  • 뷰가 재랜더링되어도 상태가 유지됨
  • 새로운 뷰가 생성될 때 초기화가 한 번만 실행됨
 

💡 언제 사용해야 할까?
뷰가 ViewModel을 직접 생성하고 소유할 때
초기화가 여러 번 되면 안 되는 경우


2️⃣ @ObservedObject

  • 뷰에서 ViewModel을 직접 소유하지 않음
  • 외부에서 주입받는 ViewModel을 사용할 때
  • 부모 뷰에서 전달된 ObservableObject를 계속 감시함
 

💡 언제 사용해야 할까?
부모 뷰에서 전달받은 ViewModel을 사용할 때
ViewModel을 여러 뷰에서 공유할 때


🚀 차이 정리

 

  @StateObject @ObservedObject
ViewModel 생성 뷰에서 직접 생성 외부에서 주입받음
초기화 시점 뷰가 생성될 때 단 한 번만 부모 뷰에서 변경될 때마다 적용
상태 유지 뷰가 갱신되어도 유지 새로운 인스턴스를 받으면 변경됨

🔥 정리

  • @StateObject → "내가 만든 ViewModel을 직접 관리할 때!"
  • @ObservedObject → "다른 곳에서 넘겨준 ViewModel을 감시할 때!"

현재 ContentView에서는 **ViewModel을 직접 생성하므로 @StateObject**가 맞고,
다른 서브 뷰에서 ViewModel을 받아서 쓰려면 @ObservedObject를 사용하면 됩니다! 🚀