본문 바로가기
Swift

[iOS] About StateObject, ObservedObject

by dsungc 2024. 9. 18.

이번 글에서도 좀 헷갈리는 친구들에 대해 정리해볼까 합니다.

우리가 SwiftUI에서 MVVM구조로 코드를 짤 때, ViewModel 설정시, ObservableObject를 채택해줍니다.

그다음, View에서 viewmodel이라는 인스턴스를 생성할 때, @ObservedObject 혹은 @StateObject를 붙여주어, viewmode이라는 개체내의  @Published로 선언된 프러퍼티가 변경되면 자동으로 UI를 업데이트 시켜줍니다.

 

 

그렇다면 차이점은...?

 

우선 눈으로 보는게 이해하는게 빠르기때문에..!

@ObservedObject

@ObservedObjct

우선 @ObservedObjct 부터 확인해보면

 

상위뷰 변화 > 하위뷰 변화 > 상위뷰 변화 순서대로 변화를 주게 되면

마지막 상위뷰 변화 때, 하위뷰의 값이 초기화 되는것을 확인할 수 있습니다.

 


@StateObject

(왜인지 모르겠지만 자꾸 gif변환하면.. 내용이 짤려서.. 이건 영상으로 ㅎㅎ 후에 수정해보겠습니다.)

 

@StateObject

 

 

반면, @StateObject 의 경우, 상위뷰에서 렌더링 되더라도 하위뷰의 값이 초기화 되지 않는 것을 확인해 볼 수 있습니다.

 

두 가지의 확실한 차이가 보이죠?

 

상위뷰의 바디가 렌더링 된다. 라는 것은 전부 다 다시 그려진다는 것인데요, 

이에 따라 하위뷰가 Init되는 것은 어찌보면 당연합니다.

하위뷰가 Init될 때, 하위뷰가 갓고 있는 ObservedObject 인스턴스는 매번 새롭게 생성됩니다.

위의 영상처럼 하위뷰의 숫자가 0이되는 것처럼말이죠.

 

반면에, Stateobject 인스턴스는 생성하는 시점에 한 번 만들어지고 나면,

뷰가 다시 렌더링 되더라도 뷰내의 변수를 재사용하기 때문에 숫자가 초기화가 안된다고 볼 수 있습니다.

 

여기까지 StateObject와 ObservedObject에 대해 알아보았는데요!

헷갈리긴 하지만 변화되는 것을 눈으로 직접 확인하면 생각보다 이해가 빨리 되더라구요!!

 

그렇다면 

.

.

.

.

여기까지

 

 

'Swift' 카테고리의 다른 글

[iOS] About Realm  (1) 2024.09.25
[iOS] About 메모리 구조  (1) 2024.09.21
[iOS] About ObservedResults, ObservedRealmObject  (1) 2024.09.16
[iOS] About state, binding  (0) 2024.09.08
[iOS] About Hot & Cold Observable  (1) 2024.09.03