SwiftUI와 Combine에서 @Published, PassthroughSubject, CurrentValueSubject의 차이점과 사용법

JaeEun Lee·2024년 12월 15일

SwiftUI & Jetpack compose

목록 보기
10/10

SwiftUI와 Combine에서 사용되는 @Published, PassthroughSubject, CurrentValueSubject 데이터 흐름과 상태관리 도구입니다. 차이점과 사용용도에 대해 정리해 보았습니다.

@Published

@Published는 SwiftUI에서 상태 변경을 추적하고 뷰를 자동으로 업데이트할 수 있게 도와주는 프로퍼티 래퍼입니다. 주로 ObservableObject와 함께 사용되며 "@Published로 정의된 프로퍼티의 값이 변경될 때마다 UI를 자동으로 업데이트" 합니다.

  • SwiftUI에서 상태 관리
    • 데이터가 변경되면 해당 변경 사항을 자동으로 뷰에 반영합니다.
  • 자동 UI 업데이트
    • @Published는 상태가 변경될 때마다 자동으로 UI를 새로 그려주기 때문에 코드가 간결하고 유지보수하기 쉽습니다.

@PassthroughSubject

이벤트 데이터 흐름을 처리할 때 사용하는 Publisher입니다. 초기값이 없고 구독자가 있을 때만 새로운 값을 전달합니다. "이벤트를 전달 하거나 특정 동작을 구독자에게 알릴 때" 유용합니다.

  • 이벤트 전달
    • 버튼 클릭, 알림 등 이벤트 기반의 데이터를 전달할 때 사용됩니다.
  • 단방향 데이터 흐름
    • 데이터의 흐름을 수동으로 제어하고 새로운 값이 발생할 때만 전달합니다.

CurrentValueSubject

CurrentValueSubject는 PassthroughSubject와 유사하지만 "현재값을 저장하는 특징" 이 있습니다. 구독자가 새로 추가되면 현재값을 즉시 전달하며 상태와 이벤트를 모두 처리할 때 유용합니다.

  • 상태와 이벤트를 동시에 처리
    • 현재 상태를 유지하면서 새로운 이벤트를 전달할 수 있습니다.
  • 상태와 함께 이벤트 전달
    • 구독자가 처음 구독할 때 현재 상태를 즉시 전달해야 할 때 사용됩니다.

요약

특징

특성PublishedPassthroughSubjectCurrentValueSubject
사용위치SwiftUI 상태관리이벤트전달상태 + 이벤트관리
초기값없음없음필요
값 저장 여부저장하지 않음저장하지 않음현재값 저장
UI와 통합자동으로 통합수동으로 관리수동으로 관리
구독자 동작자동 업데이트연결된 구독자에게만 전달새 구독자에게 현재값 전달

UI와 연결된 상태를 관리할때

@Published를 사용하면 자동으로 UI 업데이트를 처리할 수 있어 상태 관리가 간단.

이벤트 전달할때

버튼 클릭이나 사용자 입력 같은 이벤트를 구독자에게 전달하고 싶다면 PassthroughSubject가 적합. 새로운 값이 발생할 때마다 알림을 보낼 수 있음.

상태와 이벤트를 모두 관리할때

CurrentValueSubject는 현재 상태를 유지하면서 새로운 이벤트를 처리해야 할 때 유용. 새 구독자는 항상 최신 상태를 받을 수 있음.

profile
공업철학프로그래머

0개의 댓글