[swift] Swift Realm에서의 관계 설정 방법

Swift에서 Realm은 데이터베이스를 다루기 위한 강력한 도구입니다. Realm을 사용하여 객체 간의 관계를 설정하고 관리할 수 있습니다. 이 글에서는 Swift Realm에서의 관계 설정 방법에 대해 알아보겠습니다.

1. 일대다 관계 설정하기

일대다 관계는 한 객체가 다른 객체들과의 관계를 가지는 경우를 의미합니다. 예를 들어, 하나의 사용자는 여러 개의 포스트를 작성할 수 있습니다. 이런 경우, User와 Post 사이에 일대다 관계를 설정해야 합니다.

// User.swift

import RealmSwift

class User: Object {
    @objc dynamic var id: Int = 0
    @objc dynamic var name: String = ""

    let posts = List<Post>()
}
// Post.swift

import RealmSwift

class Post: Object {
    @objc dynamic var id: Int = 0
    @objc dynamic var title: String = ""
    @objc dynamic var content: String = ""

    let user = LinkingObjects(fromType: User.self, property: "posts")
}

위의 코드에서는 User 클래스에 List<Post> 타입의 posts 속성을 추가하여 사용자가 작성한 모든 포스트를 저장합니다. 또한, Post 클래스에는 LinkingObjects를 사용하여 해당 포스트가 어떤 사용자에게 속해있는지를 저장합니다.

2. 일대일 관계 설정하기

일대일 관계는 한 객체가 다른 객체와의 하나의 관계만을 가지는 경우를 의미합니다. 예를 들어, 사용자는 하나의 프로필을 가지고 있을 수 있습니다. 이 경우, User와 Profile 사이에 일대일 관계를 설정해야 합니다.

// User.swift

import RealmSwift

class User: Object {
    @objc dynamic var id: Int = 0
    @objc dynamic var name: String = ""

    @objc dynamic var profile: Profile?
}
// Profile.swift

import RealmSwift

class Profile: Object {
    @objc dynamic var id: Int = 0
    @objc dynamic var bio: String = ""

    let user = LinkingObjects(fromType: User.self, property: "profile")
}

위의 코드에서는 User 클래스에 Profile 타입의 profile 속성을 추가하여 사용자의 프로필을 저장합니다. 또한, Profile 클래스에는 LinkingObjects를 사용하여 해당 프로필이 어떤 사용자에게 속해있는지를 저장합니다.

3. 다대다 관계 설정하기

다대다 관계는 한 객체가 여러 개의 다른 객체들과의 관계를 가지는 경우를 의미합니다. 예를 들어, 사용자는 여러 개의 태그를 가질 수 있고, 태그는 여러 사용자에게 속할 수 있습니다. 이런 경우, User와 Tag 사이에 다대다 관계를 설정해야 합니다.

// User.swift

import RealmSwift

class User: Object {
    @objc dynamic var id: Int = 0
    @objc dynamic var name: String = ""

    let tags = List<Tag>()
}
// Tag.swift

import RealmSwift

class Tag: Object {
    @objc dynamic var id: Int = 0
    @objc dynamic var name: String = ""

    let users = LinkingObjects(fromType: User.self, property: "tags")
}

위의 코드에서는 User 클래스에 List<Tag> 타입의 tags 속성을 추가하여 사용자가 가지는 모든 태그를 저장합니다. 또한, Tag 클래스에는 LinkingObjects를 사용하여 해당 태그가 어떤 사용자에게 속해있는지를 저장합니다.

이상으로, Swift Realm에서의 관계 설정 방법에 대해 알아보았습니다. 각각의 관계 유형에 맞는 속성과 LinkingObjects를 사용하여 객체 간의 관계를 설정하고 활용할 수 있습니다.

참고 자료