[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple/SwiftData & CoreData

[SwiftData] 기본설명 및 특징

inu 2023. 7. 29. 20:05
반응형

https://developer.apple.com/xcode/swiftdata/

SwiftData

선언적 코드로 데이터를 쉽게 관리해주는 도구. Swift 코드를 통해 안정적으로 쿼리 요청을 보내고 필터링할 수 있다. SwiftUI와의 연동성도 좋다.

모델생성 용이

모델도 @Model 어트리뷰트만 붙여주면 추가적인 파일이나 도구없이 관리가 가능하다. 또한 제약조건도 @Attribute(.unique) 와 같은 방식으로 간단하게 선언할 수 있다.당연히 Relationship 설정도 가능하다.

@Model
class Recipe {
    @Attribute(.unique) var name: String
    var summary: String?
    var ingredients: [Ingredient]
}

SwiftData는 내가 생성한 모델을 기반으로 커스텀 스킴을 만들 수 있고, 필드를 효율적으로 저장소에 매핑한다. 객체는 SwiftData에 의해 관리되며, 데이터베이스에서 필요할경우 fetch되고 추가 동작없이 같은 순간에 바로 save된다. 또한 Model Context API를 통해 모든 제어가 가능하다.

SwiftUI와의 연계

@Query 를 SwiftUI에서 사용해서 데이터를 가져올 수 있다. SwiftData와 SwiftUI는 함께 동작하여 데이터를 실시간으로 업데이트하고 영구데이터에 변경이 발생하면 이를 바로 반영한다. 수동적인 refresh는 필요없다.

@Query var recipes: [Recipe]
var body: some View {
    List(recipes) { recipe in
        NavigationLink(recipe.name, destination: RecipeView(recipe))
    }
}

Swift-native Predicate

컴파일러에 의해 타입이 검사되는 표현식을 통해 데이터를 쿼리하고 필터링해서 개발중에 오타나 실수를 파악할 수 있다. Predicate 는 영구저장소에서 데이터를 매핑할 수 없는 표현식이 있는 경우 이를 컴파일 타임에 체크한다.

let simpleFood = #Predicate<Recipe> { recipe in
    recipe.ingredients.count < 3
}

CloudKit을 활용한 동기화

데이터를 DocumentGroup 을 사용해 파일에 저장할 수 있고 iCloud Drive와 동기화할 수 있다. 또한 CloudKit을 사용해 다바이스와 데이터를 동기화할 수도 있다.

CoreData와의 연계

Core Data와 연동도 가능하다. 따라서 하나의 앱에서 하나의 영구저장소를 사용하는 것처럼 쓸 수 있다. Xcode가 Core Data의 모델을 SwiftData에서 사용가능한 class로 변경해준다.

반응형