SwiftUI와 Combine에서 사용되는 @Published, PassthroughSubject, CurrentValueSubject 데이터 흐름과 상태관리 도구입니다. 차이점과 사용용도에 대해 정리해 보았습니다.
@Published는 SwiftUI에서 상태 변경을 추적하고 뷰를 자동으로 업데이트할 수 있게 도와주는 프로퍼티 래퍼입니다. 주로 ObservableObject와 함께 사용되며 "@Published로 정의된 프로퍼티의 값이 변경될 때마다 UI를 자동으로 업데이트" 합니다.
이벤트 데이터 흐름을 처리할 때 사용하는 Publisher입니다. 초기값이 없고 구독자가 있을 때만 새로운 값을 전달합니다. "이벤트를 전달 하거나 특정 동작을 구독자에게 알릴 때" 유용합니다.
CurrentValueSubject는 PassthroughSubject와 유사하지만 "현재값을 저장하는 특징" 이 있습니다. 구독자가 새로 추가되면 현재값을 즉시 전달하며 상태와 이벤트를 모두 처리할 때 유용합니다.
| 특성 | Published | PassthroughSubject | CurrentValueSubject |
|---|---|---|---|
| 사용위치 | SwiftUI 상태관리 | 이벤트전달 | 상태 + 이벤트관리 |
| 초기값 | 없음 | 없음 | 필요 |
| 값 저장 여부 | 저장하지 않음 | 저장하지 않음 | 현재값 저장 |
| UI와 통합 | 자동으로 통합 | 수동으로 관리 | 수동으로 관리 |
| 구독자 동작 | 자동 업데이트 | 연결된 구독자에게만 전달 | 새 구독자에게 현재값 전달 |
@Published를 사용하면 자동으로 UI 업데이트를 처리할 수 있어 상태 관리가 간단.
버튼 클릭이나 사용자 입력 같은 이벤트를 구독자에게 전달하고 싶다면 PassthroughSubject가 적합. 새로운 값이 발생할 때마다 알림을 보낼 수 있음.
CurrentValueSubject는 현재 상태를 유지하면서 새로운 이벤트를 처리해야 할 때 유용. 새 구독자는 항상 최신 상태를 받을 수 있음.