*이 글은 SwiftUI 공식문서를 번역한 글입니다.
Source of Truth
앱을 사용할 때, 저장되어있는 정보들이 복사되는 형식(여러 개의 복사본이 생성되는 형식)을 따르면 정보에 대한 여러 복사본들의 통일성을 유지하기가 힘들어진다. 이로 인해 야기되는 Inconsistency는 여러 버그들을 낳는다. 그래서 이를 막기 위해 source of truth(각 data가 저장되어 있는 곳. 주소) 개념을 사용한다. data는 하나의 위치(source of truth)에 저장되고, data가 필요한 view들은 이 주소에 접근할 수 있다.
우리가 이 source of truth를 생성할 수 있다. 이 source들을 어떻게, 어디다가 정의하고 생성하는지는 이 data가 여러 뷰들 사이에 공유되는 것인지, 또는 데이터가 변할 가능성이 있는지에 따라 달라진다. Scrumdinger에서 (이 프로젝트에서)는 ‘ScrumdingerApp’에 source of truth를 생성할 것이고, 다른 뷰들이 이를 공유하기 위해 접근이 가능하다.
Swift Property Wrappers
#State
우리가 @State를 선언할 때 SOT(source of truth)는 이 View 내부에 위치한다. 그리고 시스템은 @State 프로퍼티에 의존 및 확인하면서 뷰의 모든 요소들을 확인 및 체크한다. 사용자가 앱을 사용하다보면 (interaction이 발생하면) @State 프로퍼티가 바뀔 수도 있다. 그러면 이를 감지하고 새로운 View를 그린다. (@State를 선언하면 View 내부 값들이 변하면 view를 새로 그려준다)
예를 들어, 우리가 만든 Scrumdinger 앱에서 사용자가 Scrum 요소를 변경했다면 @State로 선언한 우리의 프로퍼티는 이를 감지하여 새로 View를 그려준다. 왜냐하면 State property는 transient state를 유지하게 도와주기 때문이다.
그리고 @State는 우리 view structure의 로컬에 속한다. 이게 무슨 말이냐면 우리가 보는 단일 뷰에서 적용된다는 뜻인데, 일상에서 볼 수 있는 예를 살펴보자. 우리가 쇼핑 앱에서 필터를 적용하여 옷을 나열한다던가, 현재 선택된 아이템만 리스트로 띄운다던가 이러한 행위는 우리가 보고 있는 단일 뷰에만 적용되면 된다. 그럼 만약에 이러한 일들 말고 SOT를 다른 뷰에서도 사용하고 접근하려면 어떻게 하는가?
#Binding
@Binding으로 감싸준 프로퍼티는 @State 프로퍼티와 마찬가지로 SOT에 접근하여 읽고 쓸 수(write) 있다. @Binding wrapper는 데이터를 직접적으로 저장하지 않고, 대신에 SOT와 데이터를 업데이트, display하는 뷰 간의 양방향 연결을 생성한다. 그리고 이 연결은 다중 뷰들간 연결되어 있는 데이터들을 동기화하게 해준다.
시스템은 @State에서의 데이터와 @Binding을 포함하는 자식 뷰 사이에 의존성을 만든다. 부모 뷰나 자식 뷰나 우리가 SOT라고 정의한 프로퍼티를 수정할 수 있다. 프레임워크는 이러한 변화(수정)들을 자동으로 반영하여 업데이트 해준다. 나중 실습에서 scrum을 편집할 때 binding을 사용할 것이다. SwiftUI는 editView가 binding에 의해 변할 때 SOT를 업데이트한다.
'iOS > SwiftUI' 카테고리의 다른 글
[SwiftUI] Core Data를 이용한 데이터 CRUD (iCalories) (0) | 2022.05.17 |
---|---|
[SwiftUI] iOS App Dev Tutorial에서 Data Update 파트 간단 정리 (0) | 2022.05.11 |
[SwiftUI] Making Classes Observable (0) | 2022.05.11 |
[SwiftUI] Design Pattern : MVVM (0) | 2022.04.27 |