[iOS] CoreData 를 사용해보아요

Madeline👩🏻‍💻·2023년 8월 31일
1

iOS study

목록 보기
13/61

😜

CoreData가 뭐야?

CoreData는 UserDefault와 비슷하지만 다른 로컬 데이터 저장 방식이다.

UserDefault는 간단한, 소규모의 데이터를 저장할 때 메모리 효율성으로 인해 유용한 반면, 앱이 삭제되어도 데이터가 남아있어야 하거나, 보안이 중요하다면 사용하면 안된다.

🐾

CoreData를 알기 위해 중요한 건, 데이터베이스 기능을 지원하는 프레임워크이다.
(데이터베이스가 아니다!애플이 제공하는 퍼스트파티 프레임워크)
CoreData는 대규모 데이터를 저장하거나 체계적인 데이터베이스가 필요할 때 사용하는 것이 적합하다.
또 CloudKit을 사용하여 하나의 디바이스에서 데이터를 유지, 저장하거나 여러 디바이스에 동기화할때 유용하다.

공식문서에는 CoreData를 이럴 때 사용하라고 말한다.

  • 오프라인에서 사용할 수 있는 영구적인 데이터를 저장할 때
  • 임시 데이터를 저장할 때(Cache)
  • add undo functionality to your app on a single device
  • 하나의 iCloud 계정 - 여러 디바이스에 데이터를 동기화할 때

CoreData의 데이터 모델 editor를 통해 데이터 유형, 관계를 정의하고, 클래스를 정의한다.

🤼 헷갈려서 정리해두기
- Cache: 데이터를 일시적으로, 임시로 저장, 빠르게 액세스
- Save: 데이터를 장기적으로 보존, 나중에 또 사용!

CoreData의 역할, 기능

1. 지속성(Persistence)

CoreData는 객체를 저장소에 매핑하는 세부정보를 추상화하므로, 데이터베이스를 직접 관리하지 않고도 데이터를 쉽게 저장할 수 있다.
(앱이 삭제되면 삭제된다)

2. 개별, 일괄 변경사항 실행취소/다시 실행

CoreData의 실행취소관리자는 변경사항을 추적해서,
개별, 그룹, 일괄로 실행취소하거나 다시 실행할 수 있다.
(저장뿐만 아니라 undo, redo, caching, ...기능 수행한다)

3. 백그라운드 데이터 작업

JSON을 개체로 구문 분석하는 등 UI를 차단할 수 있는 데이터작업을 백그라운드에서 수행한다.
그런 다음 결과를 캐시하거나 저장해서 서버 왕복을 줄일 수 있다.

4. View 동기화

CoreData는 테이블, 컬렉션 뷰에 대한 데이터 소스를 제공하여,
뷰와 데이터의 동기화를 유지하는데 도움이 된다.

5. 버전 관리, 마이그레이션

CoreData에는 앱의 데이터 모델 버전을 관리하고, 유저 데이터를 마이그레이션하는 메커니즘이 포함되어 있음.

CoreData를 추가해보아요.

CoreData 작업의 첫번째 단계는 개체유형, 속성 및 관계를 포함하여 앱 개체의 구조를 정의하는 데이터 모델 파일을 만드는 것이다.

새 Xcode 프로젝트에 CoreData 추가


기존 프로젝트에 CoreData 추가

파일 > 새로 만들기 > 파일을 선택하고 iOS 플랫폼 탭을 선택합니다. 핵심 데이터 섹션까지 아래로 스크롤하여 데이터 모델을 선택하고 다음을 클릭합니다.

모델 파일의 이름을 지정하고 해당 그룹과 대상을 선택한 다음 만들기를 클릭합니다.

Xcode는 .xcdatamodeld지정된 이름의 파일을 프로젝트에 추가합니다.

CoreData 스택 설정

  • 앱의 개체를 관리하고 유지하는 클래스를 설정합니다.

위에서 데이터 모델 파일을 생성했다면, 앱의 모델 계층을 공동으로 지원하는 클래스를 설정한다.
-> 이런 클래스를 CoreData Stack이라고 한다.

  • NSManagedObjectModel: 앱의 유형, 속성, 관계를 설명하는 모델 파일
  • NSManagedObjectContext: 앱 유형 인스턴스의 변경사항 추적
  • NSPersistentStoreCoordinator: 스토어에서 앱 유형의 인스턴스를 저장, 가져오기
  • NSPersistentContainer: 모델, 내용, 코디네이터를 한 번에 설정

persistentContainer 초기화

일반적으로 앱 시작 중에 CoreData를 초기화한다.
AppDelegate에서 처음 사용될 때까지, persistentContainer를 lazy 변수로 만든다.

  • 새 xcode 프로젝트 생성할때 CoreData 만들었다면, 자동으로 위에거(lazy어쩌고) 함.
class AppDelegate: UIResponder, UIApplicationDelegate {


    ...


    lazy var persistentContainer: NSPersistentContainer = {        
        let container = NSPersistentContainer(name: "DataModel")
        container.loadPersistentStores { description, error in
            if let error = error {
                fatalError("Unable to load persistent stores: \(error)")
            }
        }
        return container
    }()


    ...
}

레퍼런쓰
https://developer.apple.com/documentation/coredata/
https://developer.apple.com/documentation/coredata/creating_a_core_data_model
https://jeong9216.tistory.com/559

profile
🍎 Apple Developer Academy@POSTECH 2기, 🍀 SeSAC iOS 4기

0개의 댓글