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 공식 문서와 예제 코드 링크를 제공하오니, 더 많은 정보를 참고하시기 바랍니다.