250x250
반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

스윞한 개발자

Swift - Realm 본문

Swift 이론

Swift - Realm

스윞남 2024. 4. 12. 19:27
728x90
반응형
SMALL

안녕하세요! 이번 포스팅에서는 realm에 대해서 공부하고 정리해 보겠습니다.

 

 

먼저 공식문서를 확인해 볼게요!


728x90

https://github.com/realm/realm-swift

 

GitHub - realm/realm-swift: Realm is a mobile database: a replacement for Core Data & SQLite

Realm is a mobile database: a replacement for Core Data & SQLite - realm/realm-swift

github.com

 

https://www.mongodb.com/docs/realm/sdk/swift/quick-start/

 

Quick Start - Swift SDK — Atlas Device SDK

Docs Home → Develop Applications → Atlas Device SDK This Quick Start demonstrates how to use Realm with the Realm Swift SDK. Before you begin, ensure you have Installed the Swift SDK.Near the top of any Swift file that uses Realm, add the following imp

www.mongodb.com

"Realm은 휴대폰, 태블릿, 웨어러블 기기 내에서 직접 실행되는 모바일 데이터베이스입니다. 이 저장소에는 Realm Swift 및 Realm Objective-C의 iOS, macOS, tvOS 및 watchOS 버전에 대한 소스 코드가 보관되어 있습니다."라고 되어있습니다.

 

Relam은 모바일에 특화된 데이터베이스입니다. iOS에서 Relam을 사용할 경우, UserDefaults와 CoreData를 대체해 Persistent data를 저장하고 관리할 수 있습니다.

 

대표적인 특징으로는 ORM이 아닌 데이터 컨테이너 모델을 사용합니다!

데이터 객체를 Relam에 객체 형태로 저장합니다. DB에서 가져온 데이터를 복잡한 가공과정 없이 바로 사용할 수 있다는 장점이 있습니다!

 

여기서 "ORM"이란?

# ORM

Object-Relational Mapping

객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해 주는 것을 말합니다.

즉, 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용합니다. 그렇기 때문에 객체 모델과 관계형 모델 간에 불일치가 존재하고 ORM을 통해서 객체 간 관계를 바탕으로 SQL을 자동으로 생성해서 불일치를 해결해 줍니다.

>> "DB에서 가져온 데이터를 복잡한 가공과정 없이 바로 사용할 수 있다."로 생각해 주시면 될 거 같아요!

 

 

근데 iOS에 영구적인 데이터를 저장하기 위해서 사용하는 여러 가지 도구가 있는데 왜 굳이 Realm을 사용할까요?

 

# Realm을 사용하는 이유?

iOS에서 영구적인 데이터를 저장하기 위해서 사용되는 도구는 앞서 말한 UserDefault, CoreData, Realm 등이 있습니다!

 

1. UserDefault

먼저 UserDefault는 String, Int 등의 간단한 단일 데이터를 저장하는데 적합하기 때문에, 객체 형태의 여러 데이터를 저장하고 관리하는 데는 어려움이 있습니다.

 

2. CoreData

CoreDatas는 기본으로 제공되는 데이터 저장용 프레임워크로, 객체 형태로 데이터를 관리할 수 있습니다. 하지만 XCode를 통해서 Entity를 생성하고, 코드로 데이터를 Read/Write 하는 과정이 직관적이지 않고 사용하기 불편합니다.

 

그리고 Realm을 사용하는 결정적인 이유는 CoreData보다 방대한 양의 데이터 저장/CoreData보다 빠른 속도/Android와 Database를 공유할 수 있다는 장점이 있습니다.

 

*Realm은 MongoDB에 인수되었으며 NoSQL입니다.(Not Only SQL : 데이터를 저장하는데 SQL 외에 여러 유형의 DB를 사용)

 

 

이렇게 좋은 Realm을 사용하기 위해서는

 

# Cocoa Pods

 

pod 'RealmSwift', '~>10'

 

pod 파일에 추가해 주시면 됩니다!

 

# SPM

https://github.com/realm/realm-swift

 

GitHub - realm/realm-swift: Realm is a mobile database: a replacement for Core Data & SQLite

Realm is a mobile database: a replacement for Core Data & SQLite - realm/realm-swift

github.com

아래의 링크를 설치해 주시면 됩니다.

 

Realm에 저장할 데이터 객체를 정의할 때는 일반적인 모델을 정의하는 것처럼 클래스를 만들고 프로퍼티에 정의하면 됩니다!

 

// Define your models like regular Swift classes
class Dog: Object {
    @Persisted var name: String
    @Persisted var age: Int
}
class Person: Object {
    @Persisted(primaryKey: true) var _id: String
    @Persisted var name: String
    @Persisted var age: Int
    // Create relationships by pointing an Object field to another Class
    @Persisted var dogs: List<Dog>
}
// Use them like regular Swift objects
let dog = Dog()
dog.name = "Rex"
dog.age = 1
print("name of dog: \(dog.name)")

// Get the default Realm
let realm = try! Realm()
// Persist your data easily with a write transaction
try! realm.write {
    realm.add(dog)
}

 

 

Realm은 create, update, delete 동작을 read-write operation으로 이루어진 transaction으로 관리하고 Realm을 오픈하고 객체를 수정할 때는 반드시 write transaction block 안에서 수정을 해야 합니다.

 

이렇게 이번 포스팅에서는 Realm에 대해서 공부하고 정리해 보았습니다! 다음에는 이 Realm에 대해서 실제로 파일, 이미지를 저장해 보고 가져오는 실습을 진행해 보겠습니다.

 

잘못된 정보에 대한 지적은 언제나 환영입니다! 감사합니다.

 

728x90
반응형
LIST

'Swift 이론' 카테고리의 다른 글

Swift - ModernCollectionView  (0) 2024.04.14
Swift - CompositionalLayout  (2) 2024.04.13
Swift - ReactiveX(RxSwift)  (2) 2024.04.12
Swift - WMO 전체 모듈 최적화  (0) 2024.04.11
Swift - Concurrency  (0) 2024.04.11