옵저버 패턴이란?
옵저버 패턴이란 데이터 스트림과 데이터 스트림을 구독하는 구독자로 이루어진 패턴이다. 데이터 스트림은 자신이 가지고 있는 객체가 변화시 변화된 값을 발행하며, 구독자는 이 값을 구독하여 발행된 값을 이용해 특정한 작업을 수행한다. 데이터 스트림은 '발행자'라고 불리기도 해 '발행자 구독자 패턴'이라고 부르기도 한다.
ObservableObject란?
ObservableObject는 값을 발행하는 객체를 제공하는 Combine Framework의 타입이다.
*Combine Framwork는 Swift에서 쓸 수 있는 여러 event-processing operator을 제공해 비동기 작업을 도와주는 프레임웍이다.
ObservableObject의 위 특성은 옵저버 패턴을 구현하기 위해 사용된다.
ObservableObject 사용 방법
1. ObservableObject는 옵저버 패턴의 발행자를 만드는 클래스에서 상속받아야 한다. 예를 들어 포스트의 정보를 관리하는 PostManager라는 클래스가 있다고 해보자. 그러면 다음과 같이 ObservableObject를 상속 받아야 한다.
class PostManager: ObservableObject {
// ..
}
2. 다음으로는 발행자를 생성해야 한다. 발행자를 생성하는 방법은 간단하다. 단순히 발행자 역할을 하는 변수에 @Published Annotation을 붙이면 된다.
class PostManager: ObservableObject {
@Published var postTitle: String = "DBlog"
func fetchPost() {
//Post Title을 받아오는 작업
postTitle = "Developer Blog"
}
}
여기까지 하면 발행자 생성이 끝난다.
3. 이제는 발행자를 구독하는 구독자를 만들어야 한다. 위에서 만든 PostManager 객체를 생성한 후 앞에 @ObservedObject Annotation을 붙임으로써 구독자를 만들 수 있다.
struct ContentView: View {
@ObservedObject var postManager = PostManager()
}
4. 구독자에서 데이터는 소비할 곳에 넣음으로써 소비할 수 있다. @Published Annotation이 붙은 postTitle을 Text에서 소비할 수 있도록 다음과 같이 코드를 만들도록 하자. Button을 누르면 postTitle의 값이 "DBlog"에서 "Developer Blog"로 바뀌도록 하는 코드이다.
struct ContentView: View {
@ObservedObject var postManager = PostManager()
var body: some View {
VStack {
Text(String(postManager.postTitle))
Button(action: { postManager.fetchPost() }, label: { Text("Fetch Data") })
}
}
}
위 코드를 실행하면 다음과 같은 결과가 나타난다.
'IOS > Swift' 카테고리의 다른 글
[Swift] ViewController의 lifecycle methods 알아보기 (0) | 2021.12.28 |
---|---|
[Swift] TableView 이용해 화면에 목록 표시하기 (0) | 2021.12.28 |
[Swift] 위치 권한 요청 방법 및 요청 문구 변경 방법 알아보기 (0) | 2021.12.26 |
[Swift] extension 키워드 이용해 타입 기능 확장하기 (0) | 2021.12.26 |
[Swift] Background Thread에서 Task 실행하기 (1) | 2021.12.26 |