반응형
안녕하세요!
데이터 저장방식의 마지막! SwiftData를 알아보도록 하겠습니다 :)
이외 다른 저장 방식에 대한 글을 보고싶으시다면 아래 링크를 참고해 주세요!
iOS 데이터 저장 방식 알아보기 - UserDefaults
iOS 데이터 저장 방식 알아보기 - File System
iOS 데이터 저장 방식 알아보기 - Core Data
SwiftData란?
SwiftData는 Apple이 제공하는 최신 데이터 저장 프레임워크로, 기존의 Core Data보다 간단하고 직관적으로 데이터를 관리할 수 있습니다.
SwiftData는 SwiftUI와 완벽히 통합되었으며, 데이터 스키마 정의와 변경 사항 추적 같은 작업을 더욱 쉽게 처리할 수 있습니다.
Core Data의 입증된 지속성 기술과 Swift의 최신 동시성 기능을 결합하여, SwiftData는 최소한의 코드로 안전하고 효율적인 데이터 관리를 구현합니다.
🤔 SwiftData를 사용하면 좋은 데이터는 어떤 게 있을까?
- 사용자 데이터의 영구 저장: 할 일 목록, 레시피 관리, 개인 설정.
- 관계형 데이터 관리: 레시피 태그, 사용자 간 연결.
- 캐시 및 임시 데이터 저장: 서버 데이터 캐싱 및 제한적인 오프라인 기능.
- 대량 데이터 관리: 텍스트 편집기, 비디오 편집기 등.
SwiftData의 주요 특징
- Swift 코드로 데이터 스키마 정의
- @Model()과 같은 매크로를 사용해 Swift 코드만으로 데이터 스키마를 정의할 수 있습니다.
- 외부 파일이나 복잡한 설정이 필요하지 않습니다.
- 관계(Relationship) 자동 관리
- 모델 간의 관계를 자동으로 관리하며, 관계 속성의 삭제 규칙도 쉽게 설정할 수 있습니다.
- 변경 사항 자동 추적
- 모델 클래스는 Observable 프로토콜을 따르기 때문에 변경 사항을 자동으로 추적합니다.
- 간단한 영구 저장(Persistence)
- 기본적으로 모든 비계산 속성을 저장하며, 저장되지 않아야 할 속성은 @Transient() 매크로를 사용해 제외할 수 있습니다.
- SwiftUI와의 강력한 통합
- modelContainer와 같은 뷰 수정자를 사용해 쉽게 모델을 설정하고, 데이터를 뷰에 반영할 수 있습니다.
- 유연한 저장소 옵션
- 메모리 저장, 읽기 전용, 특정 App Group 또는 CloudKit 컨테이너와의 연동 등 다양한 옵션을 지원합니다.
SwiftData 기본 사용 방법
1. 모델 정의
- 데이터 저장 구조를 정의합니다.
- 모델 클래스는 @Model 매크로로 선언하여 SwiftData가 이를 관리하도록 합니다.
import SwiftData
@Model
class Trip {
var destination: String
var startDate: Date
var endDate: Date
init(destination: String, startDate: Date, endDate: Date) {
self.destination = destination
self.startDate = startDate
self.endDate = endDate
}
}
2. ModelContainer 설정
- 앱에서 사용될 데이터 모델들을 등록하고 관리하는 컨테이너를 만듭니다.
- modelContainer(for:)를 통해 필요한 모델 클래스를 등록합니다.
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.modelContainer(for: [Trip()])
}
}
}
3. 모델 인스턴스를 ModelContext에 삽입
- @Environment(\modelContext)를 통해 모델 콘텍스트를 가져옵니다.
- 새로 생성한 모델 인스턴스를 콘텍스트에 삽입합니다.
- 콘텍스트는 데이터 변경 사항을 추적하고 영구 저장을 처리합니다.
import SwiftUI
struct ContentView: View {
@Environment(\modelContext) private var modelContext
@Query private var trips: [Trip]
var body: some View {
VStack {
List(trips) { trip in
Text(trip.destination)
}
Button("Add Trip") {
let newTrip = Trip(destination: "Paris", startDate: Date(), endDate: Date().addingTimeInterval(86400 * 7))
modelContext.insert(newTrip)
}
}
}
}
SwiftData 활용 팁
속성의 저장 방지
- 임시 데이터를 저장하지 않으려면 @Transient() 매크로를 사용합니다.
@Model
class Weather {
var temperature: Double
@Transient var isSunny: Bool
}
삭제 규칙 설정
- 관계 속성의 삭제 규칙을 지정하려면 @Relationship 매크로를 사용합니다.
@Model
class Trip {
var accommodations: [Accommodation]
@Relationship(deleteRule: .cascade)
var accommodations: [Accommodation]
}
테스트를 위한 메모리 저장소
- 테스트 시 데이터가 디스크에 저장되지 않도록 메모리 저장소를 설정할 수 있습니다.
.modelContainer(for: [Trip()], inMemory: true)
SwiftData와 Core Data 중 뭘 써야할까?
항목 | SwiftData | Core Data |
지원 OS | iOS 17 이상에서만 사용 가능 | iOS 16 이하를 포함한 모든 iOS 버전에서 사용 가능 |
개발 속도 | 빠르고 간단하며, Core Data 대비 약 10분의 1의 시간으로 앱 개발 가능 | 더 복잡하며 모델 파일, 설정 등이 필요해 상대적으로 많은 시간 소요 |
간단한 데이터 관리 | 적합 기본적인 데이터 저장 및 관리 작업에 적합 |
가능하지만 설정이 복잡해 SwiftData보다 불편 |
복잡한 데이터 관리 | 제한적 고급 기능(예: NSFetchedResultsController)이나 세밀한 제어가 필요하면 부적합 |
적합 복잡한 관계형 데이터 및 대규모 데이터 관리에 강력한 기능 제공 |
문서 및 커뮤니티 지원 | 부족 새로운 기술로 자료와 커뮤니티 지원이 제한적 |
풍부 오래된 기술로 Apple 문서와 Stack Overflow 등에서 자료와 질문 답변을 쉽게 찾을 수 있음 |
Apple 기술 방향성 | 최신 기술 Swift 및 SwiftUI와 함께 새로운 Cocoa의 핵심 구성 요소로 자리 잡음 |
오래된 기술 향후 SwiftData로 대체될 가능성이 있음 |
기존 프로젝트와의 호환성 | Core Data와 동일한 데이터를 처리하므로, SwiftData → Core Data로 쉽게 전환 가능 | 별도로 SwiftData를 통합하려면 추가 작업이 필요 |
클라우드 기반 데이터 관리 | 부적합. CloudKit 같은 서비스에만 데이터를 저장하는 경우 적합하지 않음 | 가능 로컬 및 클라우드 기반 데이터 관리 모두 지원 |
커뮤니티 성장 가능성 | 높음 Swift, SwiftUI와 함께 지속적으로 확장될 가능성이 큼 |
안정적 하지만 새로운 기능 도입보다는 유지 보수 위주로 발전 |
SwiftData가 적합하지 않은 경우
- iOS 16 이하 지원이 필요한 경우
- SwiftData는 iOS 17 이상에서만 동작합니다.
- 클라우드 기반 데이터만 사용하는 경우
- CloudKit 같은 서비스에만 데이터를 저장할 경우 SwiftData는 필요하지 않습니다.
- Core Data의 고급 기능이 필요한 경우
- NSFetchedResultsController와 같은 고급 기능이 필요한 경우, SwiftData는 적합하지 않을 수 있습니다.
SwiftData의 한계와 보완점
- 문서화 부족:
새로운 기술로, 공식 문서나 커뮤니티 자료가 부족합니다. - 제한된 기능:
고급 쿼리, 대규모 데이터 최적화 등은 Core Data가 더 적합할 수 있습니다.
예시 프로젝트
간단한 ToDoApp을 만들어보았습니다!
코드 구조가 궁금하시다면 참고해주세요!! :)
반응형
'iOS' 카테고리의 다른 글
iOS 데이터 저장 방식 알아보기 - Core Data (0) | 2024.12.16 |
---|---|
iOS 데이터 저장 방식 알아보기 - File System (3) | 2024.11.14 |
APFS(Apple File System) (1) | 2024.11.13 |
iOS 데이터 저장 방식 알아보기 - UserDefaults 편 (1) | 2024.11.04 |
iOS 데이터 저장 방식 알아보기 - 개념편 (2) | 2024.10.25 |