[swift] Swift Realm을 사용한 앱 개발 사례

Realm은 iOS 앱 개발에서 많은 개발자들이 사용하는 오픈소스 데이터베이스입니다. 이번에는 Swift Realm을 사용하여 앱을 개발한 사례를 살펴보겠습니다.

앱 소개

이번 사례에서는 간단한 할일 관리 앱을 개발한다고 가정합니다. 앱은 사용자가 할일을 추가하고 관리할 수 있도록 도와줍니다. 할일은 제목, 날짜, 우선순위 등의 정보를 갖고 있으며, Realm을 사용하여 이러한 할일 목록을 저장하고 관리할 것입니다.

Realm 설정

처음으로, 프로젝트에 Realm을 추가하여 사용하기 위해 Cocoapods를 사용합니다. Podfile에 다음과 같이 Realm을 추가합니다.

target 'MyTodoApp' do
  use_frameworks!

  pod 'RealmSwift'
end

다음으로, AppDelegate에서 Realm을 설정합니다.

import RealmSwift

class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Realm 설정
        let config = Realm.Configuration(
            // 기본 Realm 데이터베이스 파일 경로
            fileURL: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("MyTodoApp.realm"),
            
            // 마이그레이션 설정
            schemaVersion: 1,
		)
        Realm.Configuration.defaultConfiguration = config
        
        return true
    }
}

이제 Realm이 프로젝트에서 사용할 준비가 되었습니다.

할일 모델 만들기

할일 목록을 저장하기 위해 할일 모델을 만들어야 합니다. Todo라는 클래스를 생성하고, Object 프로토콜을 상속받아 Realm 데이터베이스와 연결합니다.

import RealmSwift

class Todo: Object {
    @objc dynamic var id: String = UUID().uuidString
    @objc dynamic var title: String = ""
    @objc dynamic var date: Date = Date()
    @objc dynamic var priority: Int = 0

    override static func primaryKey() -> String? {
        return "id"
    }
}

이제 할일 모델은 Realm 데이터베이스에서 사용될 수 있습니다.

할일 추가 및 조회 기능 구현

앱에서 할일을 추가하고 조회하는 기능을 구현해보겠습니다.

import RealmSwift

class TodoManager {
    static let shared = TodoManager()

    // Realm 인스턴스 생성
    private let realm = try! Realm()

    func addTodo(todo: Todo) {
        try! realm.write {
            realm.add(todo)
        }
    }

    func getAllTodos() -> Results<Todo> {
        let todos = realm.objects(Todo.self)
        return todos
    }
}

TodoManager 클래스는 Singleton 패턴을 사용하여 앱 전역에서 사용될 수 있도록 합니다. addTodo 함수는 주어진 할일을 Realm에 추가합니다. getAllTodos 함수는 모든 할일을 조회하여 반환합니다.

앱에서 할일 추가 및 조회하기

이제 앱에서 TodoManager를 사용하여 할일을 추가하고 조회해봅시다.

먼저, 할일을 추가하는 부분을 구현합니다.

import UIKit

class AddTodoViewController: UIViewController {
    @IBOutlet weak var titleTextField: UITextField!
    @IBOutlet weak var datePicker: UIDatePicker!
    @IBOutlet weak var prioritySegment: UISegmentedControl!

    @IBAction func addButtonTapped(_ sender: UIButton) {
        let todo = Todo()
        todo.title = titleTextField.text ?? ""
        todo.date = datePicker.date
        todo.priority = prioritySegment.selectedSegmentIndex

        TodoManager.shared.addTodo(todo: todo)

        dismiss(animated: true, completion: nil)
    }
}

AddTodoViewController에서는 사용자가 입력한 할일 정보를 가져와 Todo 객체를 생성한 다음, TodoManager를 사용하여 Realm에 추가합니다.

다음으로, 할일을 조회하는 부분을 구현합니다.

import UIKit

class TodoListViewController: UIViewController {
    @IBOutlet weak var tableView: UITableView!

    var todos: Results<Todo>!

    override func viewDidLoad() {
        super.viewDidLoad()

        todos = TodoManager.shared.getAllTodos()

        tableView.delegate = self
        tableView.dataSource = self
    }
}

extension TodoListViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return todos.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TodoCell", for: indexPath)

        let todo = todos[indexPath.row]
        cell.textLabel?.text = todo.title

        return cell
    }
}

TodoListViewController에서는 TodoManager를 사용하여 모든 할일을 조회하여 가져옵니다. 이후 UITableView를 이용하여 할일 목록을 표시합니다.

이제 앱에서 할일을 추가하고 조회할 수 있는 기능이 완성되었습니다.

마무리

이번에는 Swift Realm을 사용하여 앱을 개발하는 사례를 살펴보았습니다. Realm의 간편한 사용법과 데이터베이스 관리 기능을 통해 앱 개발을 더욱 효율적으로 진행할 수 있습니다. 참고자료에는 Realm 공식 문서와 예제 코드 링크를 제공하오니, 더 많은 정보를 참고하시기 바랍니다.