iOS 개발일지
1017 새싹 71회차 정리 - Model Relationship 본문
iOS 앱 개발자 데뷔 과정 71회차
#1. Realm Relationship
Realm은 다른 RDBMS에서 사용하는 브릿지 테이블이나 조인을 사용하지 않고 Link, EmbeddedObject, LinkingObject를 통해 1:N, N:N 역 관계를 지원하고 있다.
- To-Many Relationship (feat. List)
Realm 리스트를 활용해, 서로 다른 두 개의 테이블을 연결시켜 일대다 관계를 만들어 봤다.
모델에서 할 일은 여기서 끝!
하지만 여기까지 진행한 후 아래와 같이 DetailTodo에 task를 직접 추가하면 어떻게 될까?
아무리 두 테이블을 연결시켰다고 해도 DetailTodo에 직접 추가한다면 Todo를 통해 접근할 수 없게 된다.
DetailTodo에서는 확인할 수 있지만 본래 의도대로 작동하지 않게 되는 것이다.
따라서 Todo에 DetailTodo를 추가하기 위해서는 특정 Todo를 지정한 후, 해당 task의 detail에 직접 append 해야 한다.
이제 DetailTodo에서도, Todo의 고래밥의 할일 7 을 통해서도 DetailTodo를 확인할 수 있다.
이렇게 생성한 realm 데이터를 삭제할 때에는 Todo를 먼저 삭제할 경우 해당 Todo의 detail 데이터가 제대로 삭제되지 않고 메모리에 남아있을 수 있으므로, 순서를 유의하여 둘 다 삭제해야 한다.
- Inverse Relationship Property (feat. LinkingObjects)
Realm에서 테이블 구조는 일반적으로 단방향으로 정의되어 있기 때문에, DetailTodo의 입장에서 Todo를 연결하고 명시적으로 사용하기 위해서는 Inverse Relationshipdp 대한 정의를 해주어야 한다.
Inverse Relationship은 To-One Relationship과 To-many Relationship에서 사용할 수 있다.
- To-One Relationship (feat. EmbeddedObject)
단일 인스턴스에 매핑하고자 할 때 To-One Relationship을 사용하며, 이 객체는 별도의 테이블이 생성되지 않는다.
Todo의 memo 컬럼을 nil로 지정하게 되면 객체 간 연결된 부분이 제거된다.
EmbeddedObject는 항상 Optional 타입이어야 한다.
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
1019 새싹 73회차 정리 - DiffableDataSource (0) | 2022.10.20 |
---|---|
1018 새싹 72회차 정리 - Compositional Layout (0) | 2022.10.18 |
1014 새싹 70회차 정리 - Shell/Git 명령어 (0) | 2022.10.14 |
1013 새싹 69회차 정리 - Realm Migration (0) | 2022.10.13 |
1012 새싹 68회차 정리 - Remote Notification (0) | 2022.10.12 |