Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

iOS 개발일지

1017 새싹 71회차 정리 - Model Relationship 본문

SeSAC iOS 데뷔과정 2기

1017 새싹 71회차 정리 - Model Relationship

Lia's iOS 2022. 10. 17. 16:55
iOS 앱 개발자 데뷔 과정 71회차

 

 

 

 

#1. Realm Relationship

Realm은 다른 RDBMS에서 사용하는 브릿지 테이블이나 조인을 사용하지 않고 Link, EmbeddedObject, LinkingObject를 통해 1:N, N:N 역 관계를 지원하고 있다.

 

- To-Many Relationship (feat. List)

Realm 리스트를 활용해, 서로 다른 두 개의 테이블을 연결시켜 일대다 관계를 만들어 봤다.

 

Todo에 대한 상세 정보를 담을 DetailTodo 테이블 생성

 

List<DetailTodo> 칼럼 추가

 

모델에서 할 일은 여기서 끝!

하지만 여기까지 진행한 후 아래와 같이 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에서 사용할 수 있다.

DetailTodo 클래스 내에 선언

 

 

 

 

- To-One Relationship (feat. EmbeddedObject)

단일 인스턴스에 매핑하고자 할 때 To-One Relationship을 사용하며, 이 객체는 별도의 테이블이 생성되지 않는다.

Todo의 memo 컬럼을 nil로 지정하게 되면 객체 간 연결된 부분이 제거된다.

EmbeddedObject는 항상 Optional 타입이어야 한다.

 

Memo 클래스 생성

 

Todo에 memo 칼럼 추가