swift 복습

CoreData와 객체그래프 - 1

섭섭's 2024. 11. 10. 12:14

CoreData는 애플이 제공해주는 객체 그래프 및 영속성 프레임 워크 입니다.

 

iOS나 macOS 등에서 앱 데이터를 저장하고 관리하는데 사용합니다.

 

데이터베이스와 같이 데이터를 영구저장 할 수 있으며, 객체간 관계를 관리하고 다양한 조건의 쿼리를 통해

 

데이터를 효율적으로 검색할 수 있습니다.

 

개념

객체 영속성 관리: CoreData는 데이터를 영구적으로 저장하여 앱이 종료되거나 다시 시작하여도 데이터가 유지될  수 있게 합니다.

 

객체 그래피 관리: CoreData는 단순 키-값 저장소가 아니라, 객체간 관계를 모델링하고 관리가 가능하여 데이터구조를 유지하기에 적합합니다.

 

NSManagedObject 와 NSManagedObjectContext: CoreData는 데이터를 NSManagedObject 형태로 저장하고 NSManagedObjectContext로 객체를 생성,저장,삭제와 불러오는 작업을 수행합니다.

 

CoreData 주요기능

데이터 관계 모델링 : CoreData는 일대다,다대다와 같은 관계를 지원하여 객체간의 관계를 쉽게 모델링 할 수 있습니다.

 

쿼리기능: NSPredicate를 이용하여 다양한 조건으로 데이터를 검색할 수 있습니다. 또한, 데이터를 필터링하고 검색도 할 수 있습니다.

 

iCloud 통합: CoreData는 iCloud와의 통합을 지원합니다. 

 

자동화된 데이터베이스 스키마: CoreData는 자동으로 스키마를 생성하고 관리해줍니다.

 

데이터 모델링과 엔티티 관계

엔티티: 엔티티는 CoreData에서 데이터 모델을 정의하는 기본 단위 입니다. 하나의 엔티티는 데이터베이스에서 하나의 테이블로 작동하며, 각 엔티티는 속성과 관계를 포함하여 구체적으로 데이터를 구조화 합니다.

 

관계: CoreData는 엔티티 간 관계를 통해서 객체 간의 상호작용를 쉽게 모델링 할 수 있습니다.

 

속성: CoreData 엔티티는 각 속성을 통해 데이터를 저장합니다. 속성은 기본 타입 뿐만 아니라 Transformable타입 도 지원합니다(이미지, 커스텀객체)

 

CoreData의 데이터 영구 저장소 옵션

CoreData는 다양한 저장소 타입을 지원합니다

 

SQLite: 가장 일반적으로 사용되는 저장소 입니다. 관계형 데이터베이스 기반이며 복잡한 쿼리와 대용량 데이터를 관리하기 적절합니다.

 

Binary: 데이터를 이진 파일 형식으로 저장하는 저장소 입니다. 빠른접근이 필요할 때 유용하지만 다른 데이터베이스나 앱과의 호환성이 떨어집니다.

 

In-Memory: 메모리 내에 데이터를 저장합니다. 테스트목적으로 사용되며, 앱 종료시 데이터도 삭제됩니다.

 


객체그래프

 

객체 그래프는 객체 간의 구조와 관계를 시각적으로 표현한 것 입니다.

 

간단히 표현하자면 앱 내에서 객체가 서로 어떻게 연결되어 있는지 나타내줍니다.

 

CoreData는 엔티티관의 관계를 정의하고 관리해주는 기능을제공하며,

 

이것을 그래프로 표현하게되면 각 객체가 노드가 되고 객체간의 관계가 선으로 나타납니다.

 

 


간단한 객체그래프 예제

예제: 학교 관리 시스템

 

이 예제는 학생과 수업,선생님,과목의 엔티티가 복잡하게 연결되어 있습니다.

 

엔티티:

Student: 속성은 name, studentID, age

Teacher: 속성은 name, teacherID, department

Class: 속성은 classname,classID, schedule

Subject: 속성은 subjectName, subjectCode

Department: 속성은 departmentName, building 

 

엔티티 간 관계:

Student - Class (N관계)

: 한 학생이 여러 수업을 들을 수 있습니다.

: 한 수업에는 여러 학생이 참여 가능합니다.

 

Teacher - Class (1관계)

: 한 선생이 여러 수업을 가르칠 수 있습니다.

: 각 수업은 한 명의 선생님이 진행합니다.

 

Class - Subject (N:1 관계)

: 각 수업은 특정 과목에 대한 수업입니다.

 

Teacher - Department (N:1 관계)

: 한 선생님은 한 학과에 소속되어 있습니다.

 

이 관계를 객체 그래프로 표현하게되면 

 

 

이렇게 표현이 되게 됩니다.

 

이제 이 객체 그래프 구조를 CoreData 모델링으로 구현해 보겠습니다

 

1.Student 엔티티

    속성:name, studentID, age

    관계: department (Department, N:1), classes (Class, N)

2.Teacher 엔티티

    속성: name, teacherID, department

    관계: department (Department, N:1), classes (Class, 1)

3.Class 엔티티

    속성: className, classID, schedule

    관계: teacher (Teacher, 1), students (Student, N), subject (Subject, N:1)

4.Subject 엔티티

    속성: subjectName, subjectCode

    관계: classes (Class, 1)

5.Department 엔티티

    속성: departmentName, building

    관계: teachers (Teacher, N:1), students (Student, N:1)