이번 프로젝트에서 사용해야하는 로컬 저장은..
SwiftData로 정했다!
코어데이터랑 고민 중에 스유에서는 스위프트데이터가 더 적합하고 최적화가 잘 되어있다 생각해서 결정!
공식문서와 블로그들을 찾아보면서 정리를 할거라 틀린거 있을 수 있음 ...
그냥 개념같은거만.,, 정리하고 적용하는 코드들은 다음에..
SwiftData
관리형 지속성과 효율적인 모델 패칭을 추가하려면 모델 코드를 선언적으로 작성하세요.
iOS는 17.0 버전 이후부터 가능 (최저 버전을 적어도 17로 잡아야한다..?)
CoreData의 검증된 지속성 기술과 Swift의 최신 동시성 기능을 결합한 SwiftData를 사용하면 최소한의 코드로 외부 종속성 없이 앱에 지속성을 빠르게 추가할 수 있다.
SwiftData는 로컬에서 생성된 콘텐츠를 유지하는 것 외에도 다양한 용도로 사용된다. 예를 들어, 원격 웹 서비스에서 데이터를 가져오는 앱은 SwiftData를 사용하여 가벼운 캐싱 메커니즘을 구현하고 제한된 오프라인 기능을 제공할 수 있다.
Swift macro가 제공하는 표현식을 제공
@Model 키워드로 사용
SwiftData는 즉시 사용할 수 있도록 기본적인 value type 프로퍼티를 기본적으로 포함
- 기본 타입(String, Int, Double, ...)
- Collection 타입 (Array, Set, Dictionary)
- 기타 (Struct, Codable)
SwiftData 모델은 타입을 관계로 참조
- 모델 유형간에 link를 만들 수 있음
선언적 데이터 모델링
- @Model 매크로를 사용해 데이터 모델을 간결하게 선언할 수 있다.
- 예시:
@Model
class TodoItem {
var title: String
var isCompleted: Bool
}
- 복잡한 타입, 관계, 컬렉션, 고유성 제약 등도 손쉽게 정의할 수 있다.
자동 데이터 영속성
- 별도의 복잡한 저장/불러오기 코드를 작성할 필요 없이, SwiftData가 내부적으로 데이터의 저장과 불러오기를 자동으로 처리
- 대용량 데이터, 정렬, 필터링, 삭제, 검색 등도 효율적으로 지원
SwiftUI와의 연결
- SwiftUI 뷰와 데이터 모델 간의 바인딩이 매우 쉽고, 데이터 변경 시 UI가 자동으로 갱신
- @Query, @Environment(\.modelContext) 등 SwiftUI 친화적인 API를 제공
iCloud 동기화 지원
- 로컬 저장소 기반이지만, 옵션으로 iCloud(CloudKit) 동기화도 지원
- Apple 계정으로 자동 인증되며, 여러 기기 간 데이터 동기화가 가능. 단, 실시간 데이터베이스는 아니며, 동기화 주기는 시스템 상황에 따라 달라진다.
Undo/Redo, 위젯, 자동 저장 등 부가 기능
- 앱 내에서 데이터 변경의 취소/재실행(Undo/Redo), 자동 저장, 위젯 연동 등 다양한 고급 기능을 내장하고 있다.
기본 사용법
- 데이터 모델 정의
@Model 을 붙인 클래스로 데이터 구조를 선언 - 모델 컨테이너 설정
modelContainer(for:) 를 통해 앱 전체에서 데이터 모델을 사용할 수 있도록 설정 - 데이터 읽기/쓰기
@Query 로 데이터 목록을 가져오고, modelContext.insert() / delete() 등으로 데이터 추가/삭제 가능 - SwiftUI와 연동
데이터 변경 시 UI가 자동으로 갱신
SwiftData는 코드가 간결하고 직관적(Core Data 대비 훨씬 적은 코드로 데이터 관리 가능)
SwiftUI와의 자연스러운 연동을 통해 데이터-UI 바인딩이 매우 쉽고, 실시간 동기화가 자연스럽게 이루어진다
하지만 복잡한 커스텀 데이터베이스 기능이 필요하다면 GRDB/SQLite.swift 등 다른 솔루션이 더 적합할 수 있다.
스위프트데이터에 관련된거 공부하다 알게되는거 간단하면 추가하고 크면 따로 글을 파겠음..!
'iOS 관련 공부 > SwiftUI' 카테고리의 다른 글
배경색 넣기 문제.. (1) | 2025.04.21 |
---|---|
네비게이션 바 background (0) | 2025.04.21 |
네비게이션바 라지타이틀 없애버리기... (0) | 2025.04.17 |
SwiftUI - LazyStack (0) | 2025.04.17 |
SwiftUI - stack views (0) | 2025.04.16 |