-
CoreData와 실습(1)카테고리 없음 2024. 7. 10. 16:25
CoreData 는 앱에서 기기의 **디스크**에 데이터를 읽고 쓸 수 있게 돕는 프레임워크
Swift 로 기기 내 디스크에 데이터를 저장할 수 있는 대표적인 방법으로는
- CoreData
- UserDefaults
1. CoreData 프로젝트 생성
프로젝트를 생성할 때 Storage → CoreData 를 선택.
2. Entity 생성
- 아래 Add Entity 버튼을 클릭해서 Entity 만들기. Entity 는 저장될 데이터들의 집합.
- (실습) PhoneBook 이라는 Entity 를 만들기
- Entity 이름은 PhoneBook
- Attribute 로는 name , phoneNumber 를 추가
- 전화번호부 라는 데이터 집합 안에 이름 과 전화번호 라는 속성이 부여된 것.
오른쪽 인스펙터 영역 중 Codegen 개념
- Code Generator 의 줄임말. Entity 를 어떤 형식의 코드로 생성할 것인지 선택하는 속성
- Manual/None = Entity 의 서브 클래스를 자동으로 생성하지 않고 개발자가 클래스 작성
- Class Definition = Entity 의 서브 클래스를 자동으로 생성.
- Category/Extension = Entity 클래스와 함께 extension 을 위한 파일까지 생성
- 여기서는 Manual/None 으로 생성
3. Code Generate
- Editor → Create NSManagedObject Subclass 를 클릭해서 코드를 생성
- 그럼 위와 같이 2개의 파일이 생성됨(PhoneBook + CoreDataClass, PhoneBook+CoreDataProperties)
PhoneBook+CoreDataClass.swift 간단 설명
import Foundation import CoreData @objc(PhoneBook) public class PhoneBook: NSManagedObject { }
NSManagedObject는 Core Data 프레임워크에서 관리되는 객체를 나타내는 기본 클래스. 이 클래스는 Core Data 엔티티와의 상호작용을 관리하며, 속성 값의 저장 및 검색을 처리
PhoneBook+CoreDataProperties.swift 간단 설명
import Foundation import CoreData extension PhoneBook { @nonobjc public class func fetchRequest() -> NSFetchRequest<PhoneBook> { return NSFetchRequest<PhoneBook>(entityName: "PhoneBook") } @NSManaged public var name: String? @NSManaged public var phoneNumber: String? } extension PhoneBook : Identifiable { }
- @nonobjc = Objective-C 에서는 동작하지 않고 Swift 에서만 동작하는 메서드임을 명시
- fetchRequest() = PhoneBook 에 대한 여러가지 데이터 검색을 도움
- @NSManaged = CoreData 에 의해 관리되는 객체를 의미
- Identifiable = PhoneBook 타입이 고유하게 식별될 수 있음을 의미
4. NSPersistentContainer 생성
- NSPersistentContainer 는 CoreData에서 데이터를 저장하고 관리하는 데 필요한 핵심 객체 → 직역해보면 영구적인 저장 장소
- 먼저 NSPersistentContainer 를 생성해줘야하는데, 프로젝트 생성할 때 CoreData 를 사용한다고 체크 해줬으므로, AppDelegate.swift 에 기본적으로 NSPersistentContainer 를 세팅하는 코드가 존재
- AppDelegate.swift 아래쪽에보면 saveContext() 라는 메서드도 자동으로 생성되어있는데, 직역하면 문맥을 저장한다는 뜻
- 데이터의 업데이트(추가, 업데이트, 삭제 등)가 일어났으면 saveContext() 를 호출해서 그 문맥을 저장해야 함
CoreData와 실습(2)
CoreData 를 활용한 CRUD(Create, Read, Update, Delete) 이전에 NSPersistentConatiner 를 만들었으므로, ViewController 에서 이를 활용해서 데이터 접근 1. CoreData 를 통해 CRUD 의 C, R 을 하는 과정ViewController.swiftentityN
bluewiper.tistory.com