본문 바로가기
🍎 Swift/iOS 학습 노트

[강의노트👩🏻‍💻] CoreData 코어 데이터

by 솔비님 2024. 7. 11.

 

 

1.  C R U D

 

데이터 CRUD 는 네이티브 (앱) 내부 또는 서버에서 일어난다

Create = 데이터 생성
Read = 데이터 읽기
Update = 데이터 업데이트 (쓰기)
Delete = 데이터 삭제

 

🍎 전화번호 앱에서 일어나는 CRUD

C = 새로운 전화번호를 등록한다
R = 저장된 전화번호 데이터를 조회한다
U = 저장된 전화번호를 수정한다
D = 전화번호를 삭제한다

 


2.  CoreData 프로젝트 생성

1️⃣  Storage → CoreData 선택

 

 

2️⃣  Entity 생성

생성된 coreData 파일 진입 → Add Entity 버튼클릭 

*Entity란? 저장될 데이터들의 집합

 

Entity 가 아래와 같이 생성됨

 

3️⃣  Entity 이름 변경 & Attributes 추가

Emtity의 이름을 목적에 맞게 변경해 준 후 Attributes 추가

PhoneBook 이라는 데이터 집합 내부에 'name', 'phoneNumber' 속성이 추가된 것

 

속성에 맞는 Type도 변경해 준다!

나는 과제 기준에 맞게 문자열로 입력받는 정보창을 만들어야 하므로 두 가지 모두 String 타입으로 해주었다

 

 

4️⃣  우측 인스펙터 영역에서 Codegen 생성

Codegen 이란?
: Entity를 어떤 형식의 코드로 생성할 것인지 선택하는 속성이다
  • Manual/None = Entity 의 서브 클래스를 자동으로 생성하지 않고 개발자가 클래스 작성
  • Class Definition = Entity 의 서브 클래스를 자동으로 생성
  • Category/Extension = Entity 클래스와 함께 extension 을 위한 파일까지 생성

 

 

 

5️⃣  Code Generate

Create NSManagedObject Subclass... 클릭

 

Entity 체크 확인 후 추가

 

Create

 

파일 2개가 추가된 것을 확인할 수 있음

 


3.  CoreData 용어 설명

  1. Entity (개체):
    • CoreData에서 데이터 모델을 정의할 때 사용하는 개념입니다. 개체는 데이터베이스의 테이블과 유사한 역할을 합니다.
    • 예를 들어, 전화번호부 앱에서 각 연락처는 하나의 개체가 될 수 있습니다. 각 개체에는 이름, 전화번호, 프로필 이미지 등의 속성이 포함될 수 있습니다.
  2. NSManagedObject (관리 객체):
    • CoreData에서 데이터베이스의 레코드에 해당합니다. 각 NSManagedObject는 하나의 개체를 나타냅니다.
    • 예를 들어, 전화번호부 앱에서 각 연락처가 NSManagedObject가 될 수 있습니다. 각 NSManagedObject는 개체의 속성(예: 이름, 전화번호)을 저장하고 관리합니다.
  3. Entity Description (개체 설명):
    • CoreData에서 개체를 만들 때 사용하는 설계 도구입니다. 개체 설명은 개체의 이름, 속성, 관계 등을 정의합니다.
    • 예를 들어, 전화번호부 앱에서 연락처 개체의 설명에는 이름과 전화번호 속성이 포함될 수 있습니다.
  4. CoreData Stack (스택):
    • CoreData에서 데이터를 저장하고 관리하는 데 필요한 모든 구성 요소의 집합입니다. 일반적으로 스택에는 관리 객체 컨텍스트, 데이터베이스 파일, 모델 파일 등이 포함됩니다.
    • CoreData 스택을 설정하면 애플리케이션이 데이터를 어떻게 저장하고 검색할지를 결정할 수 있습니다.
  5. 속성 설정 (setValue(_:forKey:)):
    • CoreData에서 NSManagedObject에 값을 할당하는 방법입니다. NSManagedObject의 각 속성(예: 이름, 전화번호)에 값을 설정하여 데이터를 저장하고 변경할 수 있습니다.
  6. 저장 (save()):
    • CoreData에서 데이터를 영구적으로 저장하기 위해 호출하는 메서드입니다. save() 메서드를 호출하면 NSManagedObject에 대한 변경 사항이 데이터베이스에 반영됩니다.
    • 저장에 성공하면 데이터가 영구적으로 저장되며, 실패하면 오류 처리를 통해 문제를 해결할 수 있습니다.

 


4.  CoreData 파일 코드 설명

1️⃣  PhoneBook+CoreDataClass.swift

import Foundation
import CoreData

@objc(PhoneBook)

//CoreData 프레임워크에서 관리되는 객체를 나타내는 기본클래스
//CoreData Entity 와의 상호작용을 관리하며 속성 값의 저장및 검색을 처리
public class PhoneBook: NSManagedObject {

}

 

2️⃣  PhoneBook+CoreDataProperties

import Foundation
import CoreData


extension PhoneBook {


	//nonobjc: Objective-C 에서는 동작하지 않는다(Swift에서만 작동하는 메서드)
    //fetchRequest(): PhoneBook에 대한 여러가지 데이터 검색을 도움
    @nonobjc public class func fetchRequest() -> NSFetchRequest<PhoneBook> {
        return NSFetchRequest<PhoneBook>(entityName: "PhoneBook")
    }

	//NSManaged: CoreData에 의해 관리되는 객체를 의미
    @NSManaged public var phoneNumber: String?
    @NSManaged public var name: String?

}

//PhoneBook의 타입이 고유하게 식별될 수 있음을 의미
extension PhoneBook : Identifiable {

}

 

 


5.  NSPersistentContainer 생성됨

AppDelegate에 기존에는 볼 수 없었던 코드가 추가된 것을 확인할 수 있음