0Pricing
Swift Academy · 강의

Combine의 @Published와 관찰

@Published가 내부적으로 작동해 Combine 게시자를 통해 변경 사항을 내보내는 방식을 알아봅니다.

Combine의 @Published와 관찰은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

`@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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 사용자 정의 프로퍼티 래퍼 만들기
  2. $binding을 사용한 투영 값
  3. Combine의 @Published와 관찰
  4. 여러 프로퍼티 래퍼 조합하기
← Swift Academy(으)로 돌아가기