250x250
반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

스윞한 개발자

SwiftUI의 Property Wrappers 본문

Swift 이론

SwiftUI의 Property Wrappers

스윞남 2024. 1. 29. 01:15
728x90
반응형
SMALL

SwiftUI에서 MVVM 패턴으로 앱을 개발하기 위해서는 다양한 프로퍼티 래퍼를 활용하는게 중요합니다! 

여러 프로퍼티 래퍼들에 대해 알아보겠습니다 ㅎㅎ

 

SwiftUI의 Property Wrappers

1. @State

  • SwiftUI에서 상태를 처리하는 방법
  • 뷰의 상태를 저장하는 프로퍼티로 상태 관리 주체는 해당 뷰
  • 기본적으로 Private 선언, 다른 뷰와 값을 소통하려면 Binding이용
  • 값이 변경될 때마다 UI 업데이트

2. @Binding

  • 뷰의 상태를 바인딩하는 방법
  • 상위 @State 변수 전달받아 하위 뷰 캐치, 변화감지/연결
  • Binding은 다른 뷰가 소유한 속성을 연결하기 때문에 소유권/저장공간 X

3. ObservableObject

  • 클래스 프로토콜로 관찰하는 어떠한 값이 변경되면 변경사항을 알려줌
  • 뷰에서 인스턴스 변화를 감시하기 위해 뷰모델 객체로 생성할 때 사용가능

4. @Published

  • ObservableObject를 구현한 클래스 내에서 프로퍼티 선언 시 사용
  • @Published로 선언된 프로퍼티를 뷰에서 관찰할 수 있음
  • ObservableObject의 objectWillChange.send() 기능을 @Published 프로퍼티가 변경되면 자동으로 호출

5. @ObservedObject

  • 뷰에서 ObservableObject 타입의 인스턴스 선언시 사용
  • ObservableObect의 값이 업데이트되면 뷰를 업데이트

6. @StateObject

  • 뷰에서 ObservableObject 타입의 인스턴스 선언시 사용
  • 뷰 마다 하나의 인스턴스 생성, 사라지기 전까지 같은 인스턴스 유지
  • @ObservedObject의 뷰 렌더링 시 인스턴스 초기화 이슈 해결을 위한 방법
  • 매번 인스턴스가 새롭게 생성되는 것처럼 외부에서 주입 받는 경우가 아닌 최초 생성 선언시에 @StateObject 사용이 적절

7. @Environment

ex) colorScheme(dark mode, light mode)

  • 미리 정의되어 있는 시스템 공유 데이터
  • 사용하려는 공유 데이터의 이름을 keyPath로 전달하여 사용
  • 시스템 공유 데이터는 가변하기에 var 선언
  • 뷰가 생성되는 시점에 값이 자동으로 초기화

8. @EnviromentObject

  • ObservableObject를 통해 구현된 타입의 인스턴스를 전역적으로 공유 사용
  • 앱 전역에서 공통으로 사용할 데이터를 주입 및 사용
  • 데이터 의존성의 문제가 발생할 수 있음(OverHead)
728x90
반응형
LIST