작성
·
11
0
안녕하세요
이번 실전 네트워크 통신 강의를 들으며 ViewModel을 만들 때 1번 방법이 아닌 2번 방법으로 만들 수 있다는 사실을 알게되었습니다.
앞쪽 강의에서 기존 1번 방식에서는 변수 생성 시 @Published
를 붙여야했지만, 2번 방식처럼 @Observable
을 사용하면 @Published
를 붙이지 않아도 된다고 하셔서 결국 위의 두 코드는 같은 기능을 한다고 이해를 했습니다.
그런데 이번 강의에서 아래와 같이 @Published
를 사용하여서, 이 부분이 이해가 잘 가지 않습니다
혼자 고민해본 결과로는,
- count 변수: 단순히 값을 읽고 쓰는 용도
- textFieldID: 퍼블리셔(특정 시간/조건에 따라 값을 방출하는..?)로 사용
위의 용도 차이이다.
그렇다면 기존 방식에서 @Published
를 모두 붙여야했던 이유는 무엇인지..? 라는 질문이 또 생기는 것 같습니다.
답변 주시면 감사하겠습니다!!
답변 1
0
안녕하세요 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