본문 바로가기
코딩 공부/Swift

[MacOS] 코어데이타 시작하기 코드

by JH-M 2022. 8. 11.

이전글 [MacOS] 코어데이타 스토리보드 바인딩 예제 에서 코드한줄 없이 코어데이타를 구현해보았습니다. 이번에는 코드를 사용해서 코어데이타를 구현해 볼것입니다.

 

✅ MacOS 앱 개발로 예제를 진행합니다.

 

 

1. 코어데이타 프로젝트 시작하기

 

Xcode 앱을 실행

 

➀ 메뉴 → File
➁ New
➂ Project...

 

➀ macOS
➁ App
➂ Next

 

➀ 프로젝트 이름 : CoreDataText
➁ Storyboard
➂ Swift
➃ Core Data 체크
➄ Next

 

프로젝트를 생성하고 나면 기본 프로젝트구성에 AppDelegate 코어데이타 코드와 CoreDataTest 모델 파일이 생성됩니다. AppDelegate 에 persistentContainer 와 saveAction 등의 코어데이타 코드가 추가되어 있습니다.

 

 

2. 코어데이타 모델 

 

코어데이타 모델파일은 데이타베이스에서 스키마와 같습니다. 다른 데이타베이스와 비슷하게 테이블을 생성하고 관리할 수 있습니다. 데이타베이스에서 테이블이 코어데이타에서는 엔티티(Entity)로 네이밍되고 있습니다.

 

➀ CoreDataTest
➁ Add Entity
➂ Entity

 

➀ Entity → Person 이름 변경 (더블클릭)
➁ + 속성 추가
➂ age (Integer16), name (String) 2개 속성 추가

 

 

3. 데이타 추가 • 조회 • 삭제

 

간단한 테스트를 위해서 UI를 사용하지 않고 바로 코드를 구현하는 방식으로 예제를 진행하겠습니다.

 

데이타 추가하기

let managedContext = self.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Person", in: managedContext)!
let record = NSManagedObject(entity: entity, insertInto: managedContext)
record.setValue("jh", forKey: "name")
record.setValue(18, forKey: "age")

// 데이타 저장
try! managedContext.save()
➀ AppDelegate
➁ applicationDidFinishLauncing 메서드에 코드 추가

 

아직은 실행해도 데이타가 추가되었는지 확인할 수 없습니다. 다음단계 데이타 조회하기에서 추가된 데이타를 확인합니다. 데이타를 저장하는 코드때문에 앱을 실행할때마다 데이타가 저장되게 됩니다.

 

데이타 조회하기

let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Person")
let persons = try! managedContext.fetch(fetchRequest)
let name = persons[0].value(forKey: "name") as! String
let age = persons[0].value(forKey: "age") as! Int
print(name, age)
➀ 이전코드에 위 코드 추가
➁ Run 실행
➂ 추가된 데이타 출력 확인

 

추가된 데이타가 persons 에 배열로 리턴됩니다. 로그를 통해 데이타 속성인  name 과 age 값을 확인할 수 있습니다.

 

데이타 삭제하기

// 삭제전 데이타 개수
print(persons.count)

managedContext.delete(persons[0])
let persons2 = try managedContext.fetch(fetchRequest)	

// 삭제후 데이타 개수
print(persons2.count)
➀ 이전코드에 위 코드 추가
➁ Run 실행
➂ 추가된 데이타 출력 확인

 

delete 메서드로 간단하게 데이타를 삭제할 수 있습니다. 배열로 리턴된 persons 첫번째 항목을 삭제합니다. 삭제 이전과 후로 변경된 데이타 개수로 삭제된것을 확인합니다.

 

 

4. 엔티티 타입 사용하기

 

  • Codegen 속성 Manual/None 설정
  • NSManagedObject 서브클래스를 추가

 

➀ CoreDataTest 
➁ Person
➂ Manual/None

 

➀ 메뉴 → Editor
➁ Create NSManagedObject Subclass...

 

➀ CoreDataTest 선택
➁ Next

 

➀ Person 선택
➁ Next

 

➀ Create

 

➀ 파일생성 확인

 

// 데이타 추가
let managedContext = self.persistentContainer.viewContext
let person = Person(context: managedContext)
person.name = "jh"
person.age = 18

// 데이타 조회
let persons = try! managedContext.fetch(Person.fetchRequest())
let name = persons[0].name!
let age = persons[0].age
print(name, age)
print(persons.count)

// 데이타 삭제
managedContext.delete(persons[0])

// 데이타 조회
let persons2 = try! managedContext.fetch(Person.fetchRequest())
print(persons2.count)
➀ AppDelegate
➁ applicationDidFinishLauncing 메서드 기존코드 제거
➂ 위 코드 추가
➀ Run 실행

 

명시된 타입을 사용해서 이전보다 간결한 코드작성이 가능합니다.

 

 

댓글