Jupyo's Daily Story
@Published 본문
728x90
반응형
@Published는 SwiftUI와 Combine에서 데이터 변경을 자동으로 알릴 수 있게 하는 프로퍼티 래퍼입니다. 이 래퍼를 사용하면 클래스에서 상태를 관리하고, 그 상태가 변할 때 자동으로 뷰가 업데이트됩니다. @Published는 ObservableObject와 함께 사용되며, 상태의 변화를 구독자에게 전달하는 역할을 합니다.
@Published란?
- @Published는 SwiftUI에서 프로퍼티의 값이 변경될 때 이를 자동으로 구독자에게 알리는 프로퍼티 래퍼입니다.
- 주로 ObservableObject를 준수하는 클래스에서 사용되며, 뷰나 다른 객체가 해당 값의 변화를 감지할 수 있습니다.
사용 이유
- 뷰모델이나 데이터 모델에서 상태 변화를 쉽게 관리하고, 자동으로 UI를 업데이트하기 위해 사용됩니다.
- 상태 변화를 알리는 로직을 구현할 필요 없이 값이 변경되면 즉시 알림을 전달할 수 있습니다.
기본 사용 예시
import SwiftUI
class CounterViewModel: ObservableObject {
@Published var count: Int = 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()
}
}
}
}
- @Published로 선언된 count는 값이 변경될 때마다 자동으로 변경 사항을 알립니다.
- ContentView는 @ObservedObject로 viewModel을 감시하고, count 값이 변경 될 때마다 UI가 자동으로 업데이트됩니다.
@Published의 특징
- 자동으로 상태를 알림: @Published로 선언된 프로퍼티가 변경될 때, 해당 변경 사항을 구독자가 즉시 받을 수 있습니다.
- 간편한 상태 관리: 별도의 상태 변화를 위한 코드를 작성하지 않아도, 데이터 변경에 따른 자동 업데이트가 이루어집니다.
- 반응형 시스템과 결합: SwiftUI의 반응형 시스템과 결합하여 자동 UI 갱신을 쉽게 구현할 수 있습니다.
Combine과의 연동
@Published는 Combine 프레임워크과 자연스럽게 연동됩니다. @Published는 Publisher 역할을 하며, 데이터 흐름을 다른 구독자들에게 전달할 수 있습니다.
import Combine
class TimerViewModel: ObservableObject {
@Published var time = 0
var timer: Timer?
func startTimer() {
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
self.time += 1
}
}
}
- 타이머 예시에서 @Published로 선언된 time 프로퍼티는 타이머가 작동할 때마다 값이 증가하며, 구독자가 이를 실시간으로 감지합니다.
SwiftUI에서의 사용 패턴
SwiftUI에서 @Published는 뷰모델의 상태가 변경될 때 자동으로 UI에 반영되도록 돕습니다. 이러한 방식으로 뷰와 뷰모델 간 양방향 데이터 바인딩이 가능해집니다.
import SwiftUI
class TextViewModel: ObservableObject {
@Published var text: String = ""
}
struct TextFieldView: View {
@ObservedObject var viewModel = TextViewModel()
var body: some View {
VStack {
TextField("Enter text", text: $viewModel.text)
Text("You typed: \(viewModel.text)")
}
}
}
- TextField에 입력한 내용이 자동으로 text 프로퍼티에 바인딩되고, 그 값이 Text 뷰에 실시간으로 반영됩니다.
메모리 관리
- @Published는 클래스 내부에서 상태를 관리하는 것이므로, 상태 변화에 따른 메모리를 신경 써야 합니다.
- 무한 루프나 메모리 누수를 방지하기 위해 참조 타입인 클래스를 적절하게 관리하는 것이 중요합니다.
요약
- @Published는 프로퍼티의 변화를 구독자에게 알리는 프로퍼티 래퍼입니다.
- 데이터 변경이 발생하면 자동으로 알림을 보내고, 이를 감시하는 뷰는 자동으로 UI를 업데이트합니다.
- Combine 프레임워크와의 자연스러운 연동을 통해 상태 변화를 쉽게 관리할 수 있습니다.
반응형
'SwiftUI' 카테고리의 다른 글
GeometryReader (2) | 2024.09.27 |
---|---|
@Environment (0) | 2024.09.27 |
@ObservedObject (0) | 2024.09.21 |
@Binding (2) | 2024.09.16 |
@StateObject (0) | 2020.10.15 |