본문 바로가기

programmer '프로그래머'

CoreData

Core Data는 애플의 프레임워크로, iOS, macOS, watchOS, tvOS 앱에서 데이터 모델을 관리하고 영구 저장할 수 있도록 도와줍니다. 데이터베이스 역할을 하면서 객체와 관계를 관리하는 기능을 제공하는데, SQL 같은 데이터베이스 시스템을 직접 사용하는 대신, 객체 지향 방식으로 데이터를 관리할 수 있도록 돕는 레이어입니다.

주요 기능

  • 객체 그래프 관리: Core Data는 객체 간의 관계를 관리할 수 있는 강력한 시스템을 제공합니다.
  • 영구 저장: SQLite, Binary, XML 형식으로 데이터를 디스크에 저장할 수 있으며, 데이터의 영구성을 보장합니다.
  • 자동 저장 및 페칭: 데이터를 자동으로 저장하거나 불러오는 기능을 제공하며, 이를 통해 복잡한 데이터 관리를 쉽게 처리할 수 있습니다.
  • 효율적인 메모리 관리: Core Data는 메모리 내에서 관리해야 할 데이터의 양을 줄이기 위해 필요한 데이터만 불러오고, 사용하지 않는 데이터는 자동으로 메모리에서 해제합니다.
  • 버전 관리: 데이터 모델의 스키마를 쉽게 변경하고, 데이터를 마이그레이션할 수 있습니다.

Core Data 구성 요소

  1. NSManagedObject: Core Data에서 데이터를 관리하는 객체입니다. 이 객체는 데이터베이스 레코드에 해당하며, 각 속성은 엔티티의 필드를 나타냅니다.
  2. NSManagedObjectModel: 애플리케이션의 데이터 모델을 정의하는 클래스입니다. 이 클래스는 데이터베이스의 스키마를 설명하며, 엔티티(테이블), 속성(컬럼), 관계 등을 포함합니다.
  3. NSPersistentStoreCoordinator: 영구 저장소와의 연결을 관리하는 역할을 합니다. 여러 저장소를 지원하며, SQLite, XML 등의 형식으로 데이터를 저장할 수 있습니다.
  4. NSManagedObjectContext: 메모리 내에서 데이터를 관리하는 컨텍스트입니다. 이 컨텍스트에서 데이터를 추가, 수정, 삭제, 조회할 수 있습니다. 데이터 변경이 완료되면 save() 메서드를 사용해 영구 저장소에 반영할 수 있습니다.
  5. NSPersistentContainer: Core Data 스택을 간단하게 설정할 수 있는 도우미 클래스입니다. 이 클래스는 NSManagedObjectContext, NSManagedObjectModel, NSPersistentStoreCoordinator를 한 번에 관리하며, 설정을 단순화합니다.

Core Data 사용 예시

import CoreData

// NSPersistentContainer 설정
let container = NSPersistentContainer(name: "MyModel")
container.loadPersistentStores { storeDescription, error in
    if let error = error {
        fatalError("Failed to load Core Data stack: \(error)")
    }
}

// NSManagedObjectContext 가져오기
let context = container.viewContext

// 새로운 엔티티 객체 생성
let newEntity = NSEntityDescription.insertNewObject(forEntityName: "Person", into: context)
newEntity.setValue("John", forKey: "name")
newEntity.setValue(30, forKey: "age")

// 저장
do {
    try context.save()
} catch {
    print("Failed to save: \(error)")
}

// 데이터 불러오기
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Person")
do {
    let result = try context.fetch(fetchRequest)
    for data in result {
        print(data.value(forKey: "name") as! String)
    }
} catch {
    print("Failed to fetch data: \(error)")
}

Core Data의 장점

  • 자동 저장 및 페칭을 통해 많은 데이터를 다룰 때에도 효율적으로 처리.
  • 데이터를 객체 지향적으로 다룰 수 있어서 Swift 코드와 자연스럽게 통합.
  • 데이터 저장, 관리, 관계 설정 등을 유연하게 처리.

이러한 Core Data는 앱의 구조를 더욱 유연하게 만들어 주며, 데이터 관리를 쉽게 할 수 있게 해줍니다.

'programmer '프로그래머'' 카테고리의 다른 글

Xcode  (1) 2024.09.20
프레임(Frame)과 바운즈(Bounds) 개념  (2) 2024.09.19
Description  (0) 2024.09.12
indexPath  (0) 2024.09.11
스위프트 dismiss  (0) 2024.09.10