iOS CoreData Relationships
iOS CoreData의 Relationship을 공부해보자.
연관 포스팅
[iOS CoreData 간단한 CRUD](https://rldd.tistory.com/587)
[iOS SwiftData in UIKit](https://rldd.tistory.com/588)
[iOS CoreData 이론](https://rldd.tistory.com/586)
[iOS CoreData Relationships](https://rldd.tistory.com/661)
히스토리
- 2024.10.13
- CoreData Relationship 정리
- 2024.12.21
- CoreData Relationship 패키지 모듈화 정리
- 샘플 코드에서 Commnutity Package 참고
히스토리
샘플코드
목차
- 용어정리
- CoreData Model 만들기 (Subclass, SwiftData)
- Create
- Delete
용어정리
Transient
- Transient란 용어는 프로그래밍 용어라 일시적인이란 의미.
- Transient는 영구 저장소에 저장되지 않으며, Transient 는 임시로 계산된 값 혹은 파생값을 관리하는데 유용
- CoreData는 실행 취소 목적으로 Transient 변경 사항을 추적함.
Optional
- Optional Realtion의 경우에는 detination 타입을 반드시 가지지 않아도 됨.
- 다만 Required Relation의 경우에는 반드시 하나 이상의 인스턴스를 가져야 함.
Destination
- Optional Realtion의 경우에는 detination 타입을 반드시 가지지 않아도 됨.
- 각 Relationship은 source entity(관계를 수정하는 엔티티)에서 destination entity로 향함
- destination entity는 source entity에 의해서 영향을 받는 타입
Inverse
- 역 관계로 source 및 destination 타입의 인스턴스가 변경될 때 CoreData가 양방향으로 변경을 전파 할 수 있도록 설정.
- 모든 Relationship은 Inverse가 있어야 함
- 각 엔티티에 개별적으로 역 관계를 추가해야 함
Delete Rule
- CoreData에서 source 인스턴스를 삭제할 때 변경 사항이 Relationship 전체에 영향을 전파되는 방식을 지정
- NoAction
- source 인스턴스를 삭제하지만 destination 인스턴스의 reference를 그대로 둠.
- 이를 수동으로 업데이트 하기 위해서 사용
- Nullify
- source 인스턴스를 삭제하고 destination 인스턴스의 reference를 null로 변경
- Cascade
- source 인스턴스를 삭제하고 모든 destination 인스턴스도 함께 삭제
- Deny
- source 인스턴스를 가리키지 않는 경우에만 source 객체를 삭제
- 데이터베이스의 트랜잭션 충돌 및 데드락, 특정 권한 유저에게만 제공 등을 위해 사용
- NoAction
Cardinality Type
- Relationship에 있어서 일대일 혹은 일대다 관계를 지정하고 이를 Cardinality라고 함.
- Use To One
- source 인스턴스와 destination 인스턴스를 단일로 연결하려면 To One을 사용
- Use To Many
- source 인스턴스와 destination 인스턴스를 1:N으로 연결하고 선택적으로 배열과 count도 제공
- Arrangement
- 선택적인 배열 관계를 제공해 순서를 지정할 수 있음.
- mutable set에서 `orderded`를 선택
- Count
- source 인스턴스의 상한 및 하한 갯수 제한을 둘 수 있음.
- optinal relationship의 경우에는 인스턴스의 수가 0개이거나 상하한 제한 내에 있을 수 있음.
- Index in Spotlight
- 스포트라이트에서 사용할 수 있음
- Use To One
CoreData Model 만들기 (Subclass, SwiftData)
CoreData에서 DataModel을 아래 형태로 생성
이미지 처럼 생성할 경우, 아래 이미지 처럼 자동으로 파일이 생성됨.
이를 수동으로 사용하고 싶을 경우에는
- Xcode > Editor > Create NSManagedObject Subclass 선택
만약 SwiftData를 사용하고 싶은 경우에는
- Xcode > Editor > Create Swift Data Code 선택
Create
생성할 때 명시적으로 Relationship을 연결해 주어야 함.
let family = FamilyEntity(context: database.context)
family.name = familyName
let person = PersonEntity(context: database.context)
person.name = personName
person.age = Int64(personAge) ?? 0
// ✅ Connect Relationship
family.addToPerson(person)
// ✅ Connect Relationship
// family.person = person
database.write(family)
Delete
Family에 addToPerson이 되어 있으므로
- Family가 삭제될 때 add 된 Person에게 영향을 미침
- Person의 Delete Rule에 따라 삭제 방식이 다름
(참고)
https://developer.apple.com/documentation/coredata/modeling_data/configuring_relationships
'apple > iOS, UIKit, Documentation' 카테고리의 다른 글
Swift Mixin and Trait (1) | 2024.11.18 |
---|---|
[Swift] Timer + RunLoop, backgroundQueue (swift-corelibs-foundation) (3) | 2024.10.15 |
[Swift] NSCache (swift-corelibs-foundation) (9) | 2024.10.11 |
UICollectionView Sticky Header (0) | 2024.09.04 |
Library vs Framework 정리 (1) | 2024.08.29 |