[iOS] Realm (1) Realm이란, Create & Read

린다·2021년 11월 2일
1

Learning iOS

목록 보기
9/13
post-thumbnail

✔️ Realm

  • iOS 관점에서의 Database 종류에는 CoreData, Realm, SQLite, FMDB 등이 존재한다.
  • 이 중에서 Realm이 선호되는 가장 큰 이유로는 성능, 현업에서 자주 사용됨, 호환성이 있다.
  • Coredata는 iOS 운영체제에서 사용할 수 있도록 구현됐기 때문에 추후에 안드로이드로와의 호환성이 다소 떨어진다고 볼 수 있다.

✔️ Realm 사용 방법

Realm을 사용하기에 앞서 관련 파일들을 모아놓기 위해 폴더를 따로 구성하는 것이 좋음!

📂 Realm
ㄴ 📑 RealmModel.swift

🔘 테이블 설계

  • Supported Property Types 확인할 수 있는 링크
  • 테이블 내에 저장하고 싶은 데이터들에 맞는 데이터 타입을 위 링크에서 확인하여 테이블을 구현해주는 과정이 필요하다.
  • 데이터 타입 및 옵셔널 가능 여부도 확인하여 작성해줘야한다.
  • 이때 PK(Primary Key)를 설정해줘야한다. 가능한 방법이 Int, String, UUID, ObjectId 등이 있으나 이번에는 ObjectId를 사용해보고자 한다!
import RealmSwift

class UserDiary: Object {
    @Persisted(primaryKey: true) var _id: ObjectId
    
    @Persisted var diaryTitle: String // 제목(필수)
    @Persisted var content: String? // 내용(옵셔널)
    @Persisted var writeDate = Date() // 날짜(필수)
    @Persisted var regDate = Date() // 등록일(필수)
    @Persisted var favorite: Bool // 즐겨찾기 기능(필수)
    
    convenience init(diaryTitle: String, content:String?, writeDate: Date, regDate: Date) {
        self.init()
        
        self.diaryTitle = diaryTitle
        self.content = content
        self.writeDate = writeDate
        self.regDate = regDate
        self.favorite = false
    }
}

🔘 테이블 선언 및 저장

  • 데이터를 저장하고자 하는 viewController로 이동하여 데이터를 저장하는 코드를 작성해준다.
import RealmSwift

class ViewController: UIViewController {
// iphone 내부에 저장된 realm 파일의 주소를 찾아서 알려주는 코드
	let localRealm = try! Realm()
    
    override func viewDidLoad() {
    	super.viewDidLoad()
        // 이 코드를 통해 현재 Realm파일이 저장된 위치의 주소를 확인할 수 있음
        // 해당 주소를 이용해 Realm파일에 바로 접근하여 저장된 데이터를 확인할 수 있음
        print("Realm is located at:", localRealm.configuration.fileURL!)
    }
    
    @objc func saveButtonClicker() {
    // 작성해둔 데이터를 선언해둔 테이블 형식(UserDiary)으로 생성 후 데이터를 저장하는 코드
    	let task = UserDiary(diaryTitle: titleTextField.text!, content: contentTextView.text, writeDate: Date(), regDate: Date())
        try! localRealm.write {
            localRealm.add(task)
        }
    }
}

🔘 저장한 데이터 불러오기

  • 데이터를 불러오고자 하는 viewController로 이동하여 데이터를 불러오는 코드를 작성한다.
import RealmSwift

class ViewController: UIViewController {
	let localRealm = try! Realm()
    
    // UserDiary 형식의 데이터를 담고 있는 배열
    var tasks: Results<UserDiary>!
    
    override func viewWillAppear(_ animated: Bool) {
    	super.viewWillAppear(animated)
        // 저장된 데이터를 받아오는 코드
        // viewWillAppear 안에 해당 코드를 작성해주면 다른 view에서 데이터를 추가하고 해당 view로 돌아올때마다 데이터가 업데이트되는 것을 확인할 수 있음!
        // 이 단계에서 원하는 내용만 필터링하거나 정렬하는 등 원하는 형태로 변형할 수 있음
        // ex. tasks = localRealm.objects(Userdiary.self).sorted(byKeyPath: "diaryTitle", ascending: false)
        // 별다른 정렬과정 없이 데이터를 불러오면 데이터의 순서가 보장되지 않기 때문에 사용자 경험을 고려했을 때 데이터를 불러온 후 정렬을 하는 것이 권장됨
        tasks = localRealm.objects(Userdiary.self)
    }
}
  • 받아온 데이터를 기반으로 tableView의 내용들을 업데이트해주는 코드
extension SearchViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tasks.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: searchTableViewCell.identifier, for: indexPath) as? searchTableViewCell else {
            return UITableViewCell()
        }
        
        let task = tasks[indexPath.row]
        cell.titleLabel.text = task.diaryTitle
        cell.contentLabel.text = task.content
        
        return cell
    }
}

0개의 댓글