inflearn logo
강의

Course

Instructor

[Lv.3] Practical Network Communication - SwiftUI Combine, Async/Await

Publisher, Subscriber

@Published의 용도

47

gaeun

2 asked

0

안녕하세요

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

image.png

 

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

 

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

image.png

 

혼자 고민해본 결과로는,

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

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

위의 용도 차이이다.

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

 

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

ios swift swiftui async-await combine

Answer 1

0

jacobko

안녕하세요 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

수강 기간 연장 문의

0

28

1

수강연장부탁드려도될까요..

0

42

2

Combine Playground 에서 실행 시

0

57

2

70강 - 글로벌 액터로 격리된 Protocol 을 extension 에서 conform 시 타입 본체의 격리 수준 질문

0

41

1

searchable이 화면 하단에 위치해요

0

61

2

Drawing Cycle 관련 질문

0

72

1

앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?

0

95

2

델리게이트 패턴 관련 질문

0

66

2

ios 애드몹 광고

0

134

2

수강 기간 연장 부탁드릴 수 있을까요?

0

61

1

활용 앱 57강 질문입니다.

0

55

1

그래프 그리기 위한 API가 프리미엄 요금제를 구독해야만 가능하다고 합니다...ㅜㅜ

0

75

2

과거 ai없을때 듣고 다시 듣는 중인데

1

55

1

활용 앱 30강 에러 질문입니다

0

64

2

예제 빌드시 The compiler is unable to type-check this expression in reasonable time 에러 발생

0

54

1

TextField 에 Binding 으로 연결하면 에러 발생

0

54

1

xcode 26.2 에서 ReducerOf<Self> 이슈

0

77

2

20강 Task 내부에서 nonisolated async 호출 예제 질문드립니다

0

78

2

19강 Actor 의 동작 관련해 질문드립니다

0

83

2

기초앱 17강 Contraints 설정 질문입니다.

0

67

2

소리가 ㅠㅠ

0

54

2

실로폰 음원 재생 오류 해결 (do.1.wav)

1

72

2

Emulate Device Frame 관련 질문입니다.

0

89

2

Actor에서 Task vs Task.detached 사용 시 재진입 문제 질문

0

104

2