환영합니다
`@Published`는 컴바인 프레임워크의 프로퍼티 래퍼로, 프로퍼티가 변경될 때마다 게시자를 통해 새 값을 내보냅니다.
@Published 기본
```swift
import Combine
class Counter: ObservableObject {
@Published var count = 0
}
let c = Counter()
let cancel = c.$count.sink { print("Count: \($0)") }
c.count += 1 // "Count: 1"
c.count += 1 // "Count: 2"
```
ObservableObject 프로토콜
```swift
class ViewModel: ObservableObject {
@Published var title = "Initial"
@Published var items: [String] = []
}
```
`ObservableObject`를 준수하는 모든 클래스는 `objectWillChange` 게시자를 자동으로 얻습니다.
objectWillChange 게시자
```swift
class VM: ObservableObject {
@Published var name = ""
}
let vm = VM()
let cancel = vm.objectWillChange.sink { print("Will change") }
vm.name = "Alice" // "Will change" printed before assignment
```
SwiftUI @StateObject와 @Published
```swift
@StateObject var vm = ViewModel()
// In View body:
Text(vm.title)
// Re-renders when vm.title changes
```
`@StateObject`는 ViewModel을 소유하고, `@ObservedObject`는 외부에서 소유한 ViewModel을 관찰합니다.
@Published에서 게시자 연결하기
```swift
class Search: ObservableObject {
@Published var query = ""
@Published var results: [String] = []
private var cancellables = Set
()
init() {
$query
.debounce(for: 0.3, scheduler: RunLoop.main)
.sink { [weak self] q in self?.search(q) }
.store(in: &cancellables)
}
}
```@Published는 할당 전에 발생합니다
`objectWillChange`는 새 값이 저장되기 *전에* 발생합니다:
```swift
vm.objectWillChange.sink { _ in print("will change") }
$count.sink { n in print("is \(n)") }
// Order: "will change" then "is 1"
```
구독 저장하기
```swift
var cancellables = Set
()
c.$count
.sink { print("\($0)") }
.store(in: &cancellables)
// cancellables keeps subscription alive
```@Published의 제한 사항
• 클래스(참조 형식)에서만 사용할 수 있습니다
• `let` 상수에는 사용할 수 없습니다
• 명시적인 격리 없이는 액터 경계를 넘어 작동하지 않습니다
• 값은 할당이 완료되기 *전에* 게시됩니다(willSet 의미론)
관찰 매크로 (스위프트 5.9 이상)
스위프트 5.9에서는 더 간단한 대안으로 `@Observable`을 도입합니다:
```swift
@Observable class Counter { var count = 0 }
// No Combine import needed; SwiftUI auto-subscribes
```
빠른 확인
`@Published`는 프로퍼티가 설정되기 전과 후 중 언제 값을 내보내나요?
복습
핵심 내용:
• `@Published var x`는 `$x`를 `Publisher`로 노출합니다
• `ObservableObject`는 `objectWillChange` 게시자를 자동으로 얻습니다
• 새 값이 저장되기 전에 발생합니다(willSet)
• 구독은 `Set
`에 저장합니다
• 스위프트 5.9: `@Observable`이 대부분의 `@Published` 사용을 대체합니다
다음: 프로퍼티 래퍼 합성자주 묻는 질문
“Combine의 @Published와 관찰” 강의는 무료인가요?
네 — “Combine의 @Published와 관찰” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Combine의 @Published와 관찰”에서 뭘 배우나요?
@Published가 내부적으로 작동해 Combine 게시자를 통해 변경 사항을 내보내는 방식을 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Combine의 @Published와 관찰” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.