시작하기에 앞서...
이 글은 @Published, @ObservedObject 을 아주~ 간단하게 설명한 글이다. 기본적인 것부터 알아두고 심도있게 들어가는것이 맞는 것 같다. (Combine 프레임워크, ViewModel... 등 공부가 필요하다)
@Published
우선 @Published 에 대해서 간단하게 설명해보자. 우선 단어에 답이 있다. Publish 라는 단어의 뜻은 출판, 발행하다라는 뜻이 있다. @Published 를 통해 선언한 변수는 어딘가에 발행하거나 알려주는 그런 역할을 한다는 느낌? 을 가지면 좋다.
그렇다면 한번 코드를 통해 예시를 보자. 아래와 같이 Count 라는 class 를 만들어 주었다. 이 클래스는 count 라는 변수를 선언하고, plus() 라는 함수는 count 라는 변수에 1 을 더해주는 기능을 한다.
자 count 라는 변수 앞에 @Published 를 붙여줘서 count 가 변경될 때 마다 어딘가에 알려주고 싶다. count 를 감시해주는 @Published 를 붙여보자.
오... 그렇다면 이 친구를 어떻게 다른 뷰에 전달할 수 있을까?
@ObservedObject
여기서 @ObservedObject 가 등장한다. 말그대로 관찰해준다는 뜻이다. 그리고 변경이 된다면 뷰를 업데이트 시켜준다. 그렇다면 그냥 다른뷰에 @ObservedObject 를 붙여서 한번 봐볼까?
Xcode 에서 아주 친절하게도 ObservableObject 가 필요합니다. 라는 오류 문구를 보여줬다. @ObservedObject 를 사용하려면 @Published 를 사용하고 있는 class 가 ObservableObject 프로토콜(약속)을 준수해야 한다! 그래서 ObservableObject 를 class 에 넣어준다.
그렇게 되면 다른 뷰에서 @ObservedObject 로 감시할 Count() 를 선언해주고, 그 안의 count 변수를 가져올 수 있게 되었다.
그렇다면 class 를 만들어줄때 만든 plus() 함수를 버튼에 사용해보겠다.
plus 라는 버튼을 누르게 된다면 count 에 1 을 더해주고, 이를 관찰하여 값이 변경되면 자동으로 뷰를 업데이트 시켜줘서 올라간 count 를 보여준다. 마치 앞에서 배운 @State 와 유사한 역할을 해준다.
결론
@Published 와 @ObservedObject 는 한 세트이며, 사용할 때에는 ObservableObject 프로토콜을 준수해야 한다. @Published 는 선언한 변수를 알리고 @ObservedObject 는 그 알려진 변수를 받아서 뷰를 업데이트 시켜준다.
'SwiftUI > SwiftUI 문법' 카테고리의 다른 글
[SwiftUI] @EnvironmentObject 알아보기 (0) | 2023.05.20 |
---|---|
[SwiftUI] @StateObject 알아보기 (0) | 2023.05.20 |
[SwiftUI] @Binding 알아보기 (0) | 2023.05.20 |
[SwiftUI] @State 알아보기 (0) | 2023.04.28 |
[SwiftUI] SwiftUI 기본 구성 ContentView (0) | 2023.04.26 |