강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

gaeun님의 프로필 이미지
gaeun

작성한 질문수

[Lv.3] 실전 네트워크 통신 - SwiftUI Combine, Async/Await

Publisher, Subscriber

@Published의 용도

작성

·

11

0

안녕하세요

이번 실전 네트워크 통신 강의를 들으며 ViewModel을 만들 때 1번 방법이 아닌 2번 방법으로 만들 수 있다는 사실을 알게되었습니다.

image.png

 

앞쪽 강의에서 기존 1번 방식에서는 변수 생성 시 @Published 를 붙여야했지만, 2번 방식처럼 @Observable을 사용하면 @Published를 붙이지 않아도 된다고 하셔서 결국 위의 두 코드는 같은 기능을 한다고 이해를 했습니다.

 

그런데 이번 강의에서 아래와 같이 @Published를 사용하여서, 이 부분이 이해가 잘 가지 않습니다

image.png

 

혼자 고민해본 결과로는,

- count 변수: 단순히 값을 읽고 쓰는 용도

- textFieldID: 퍼블리셔(특정 시간/조건에 따라 값을 방출하는..?)로 사용

위의 용도 차이이다.

그렇다면 기존 방식에서 @Published를 모두 붙여야했던 이유는 무엇인지..? 라는 질문이 또 생기는 것 같습니다.

 

답변 주시면 감사하겠습니다!!

답변 1

0

Jacob(제이콥)님의 프로필 이미지
Jacob(제이콥)
지식공유자

안녕하세요 gaeun 님.
@ObservationIgnored + @Published 사용 이유는 두개의 서로 다른 반응형 시스템을 함께 사용하기위해서 테스트 용으로 사용했습니다.

각각의 역할

@Published (Combine)

  • 목적: Combine 연산자 사용 (.debounce(), .map() 등)

  • 용도: 비즈니스 로직 처리 (유효성 검사, 데이터 변환)

@Observable (SwiftUI)

  • 목적: View 자동 업데이트

  • 용도: UI 반영

왜 @ObservationIgnored가 필요한가?

@ObservationIgnored @Published var textFieldID: String = ""
var idValid: Bool = false

@ObservationIgnored 없으면

  • textFieldID 변경 → 즉시 View 업데이트

  • .debounce()가 무의미해짐

  • 불필요한 중복 업데이트 발생

@ObservationIgnored 사용하면

  • textFieldID → Combine 파이프라인만 실행

  • 처리 결과 (idValid) → View 업데이트

  • 효율적인 업데이트 제어

실제 동작 흐름

사용자 입력

textFieldID (@Published)

Combine 파이프라인

(.debounce → .map → .sink)

idValid = true/false

View 자동 업데이트 (@Observable)


결론: Combine의 강력한 연산자를 활용하면서, SwiftUI의 새로운 @Observable로 View를 효율적으로 업데이트하기 위한 하이브리드 방식 입니다.

감사합니다

Jacob

gaeun님의 프로필 이미지
gaeun

작성한 질문수

질문하기