본문 바로가기

코딩의 유익함/스위프트(Swift)

Swift(스위프트) - Realm 설치 및 연동 예제

Swift Realm

cocoapods를 설치했다는 가정하에 글을 작성하겠습니다. 설치를 하지 않으신 분은 아래의 링크로 이동해서 설치하시면 되겠습니다.

https://value-of-life.tistory.com/152

1. cocoapods을 이용하여 Realm 설치하기

1.1 프로젝트 생성 -> 해당 경로로 이동 -> "pod init" 명령어 실행

1.1(Realm)

여기서 주의하셔야 할 사항은 프로젝트 경로에 .xcodeproj가 있는 경로로 이동해야 한다는 것입니다. 그렇지 않으면 다음과 같은 "No Xcode project found, please specify one" 에러가 나오는데 이는 보통 프로젝트 내부로 더 들어가서 실행한 경우입니다.

1.2 프로젝트 내부에 "PodFile" 하나가 생성된 것을 확인

1.2(Realm)

1.3 "Podfile"을 열어서 다음과 같이  pod 'RealmSwift' 를 삽입 후 저장

1.3(Realm)

1.4 cmd 창에서 pod install를 수행하면, 다음과 같이 설치가 되는 것을 확인할 수 있으며 프로젝트에 파일들이 생성됨

1.4(Realm)

1.5 프로젝트에 폴더에 생성된 파일들 확인

1.5(Realm)

여기까지 Realm 라이브러리 설치가 완료되었습니다. 주의할 점으로는 기존에 실행되어 있는 Xcode를 종료하고 확장자가 .xcworkspace를 실행해서 작업을 해야 정상적으로 연동이 가능하다는 점입니다.

1.6 .xcworkspace를 더블 클릭 후 실행하면 아래와 같이 정상적으로 pods 폴더 확인

1.6(Realm)

이상 설치를 마치고, 실제로 어떻게 연동하고 데이터를 저장, 삭제, 수정할 수 있는지 코드 관점에서 글을 작성해보도록 하겠습니다.

 

2. Realm Studio 설치 (데이터 현황을 보기 위함)

2.1 https://docs.realm.io/sync/realm-studio 로 들어가서 맞는 OS를 선택(MAC OS X)후 다운로드하여 설치

2.1(Realm)

2.2 이후에 Xcode 프로젝트에서 값을 저장하고 삭제한 뒤 해당 Studio를 통해서 확인 가능

 

3. Realm 라이브러리를 통해 읽기, 쓰기, 수정, 삭제

3.1 'import RealmSwift' 시  'Could not build Objective-C module 'RealmSwift' 에러가 발생할 경우

1) xcode 12.4 기준으로 Xcode창 선택 후 왼쪽 상단에 Product ->  Schemes -> New Scheme -> reamswift 선택 후 확인

2) 에러가 사라졌는지 확인

 

3.2 Relam 객체 생성 예제

import UIKit

import RealmSwift

 

import RealmSwift

class Person : Object {

    @objc dynamic var name: String = ""

    @objc dynamic var tall: Int = Int()

}

 

let realm = try! Realm()

 

print(Realm.Configuration.defaultConfiguration.fileURL!) // 랠름 파일이 생성된 위치 확인

위와 같이 Realm 객체를 만들기 위해 먼저 class를 생성합니다. 단 Object class를 상속해야 정상적으로 작동이 가능합니다.

dynamic 키워드는 Runtime 과정에서  Realm이 자동으로 변수의 변화를 탐지하며, @objc 키워드는 이런 모든 과정들이 objective-c를 기반으로 하기에 때문에 앞단에 붙여주어야 합니다.

 

이렇게 실행을 하고, Realm 파일이 생성된 경로에 들어가서 실행하면 아래와 같이 생성됨을 확인할 수 있습니다.

3.2(Realm)

3.3 Relam 객체를 이용하여 쓰기

var person_1 = Person()

person_1.name = "lion"

person_1.tall = 183 // Person 모델을 기반으로 person_1 객체를 생성

 

func Realm_write()

{

    do

    {

        try realm.write

        {

            realm.add(person_1)  // Person 저장소에 데이터 추가

        }

    }

    catch

    {

        print("\(error)")

    }

}

Realm_write()

값을 추가할 때는 realm.write안의 add 함수를 호출하여 수행합니다. 아래와 같이 데이터가 추가되었음을 확인할 수 있습니다.

3.3(Realm)

3.4 Relam 객체를 이용하여 읽기

func Realm_read()

{

    var person: Results<Person> // 읽어올 때는 변수는 Results<모델명> 타입으로 지정

    person = realm.objects(Person.self) //  Realm의 Objects함수에 인자로는 모델.self

    print(person)

}

Realm_read()

3.4(Realm)

위는 읽어온 값을 출력한 결과입니다.(tiger는 제가 따로 추가했습니다.)

 

3.5 Relam 객체를 이용하여 수정하기

func Realm_update()

{    // Person에 존재하는 name이 lion인 데이터에 대해서 tall을 170으로 업데이트

if let person = realm.objects(Person.self).filter(NSPredicate(format: "name = %@", "lion")).first

    {

        do

        {

            try realm.write

            {

                person.tall = 183

            }

        }

        catch

        {

            print("\(error)")

        }

    }

}

 Realm_update()

처음 보면 헷갈릴 수 있는데 위 내용을 DB 쿼리문으로 해석하면 update Person set tail=170 where name='lion' 입니다.

3.4(Realm)

lion의 tall이 183 -> 170으로 변경된 것을 확인할 수 있습니다.

 

3.5 Relam 객체를 이용하여 삭제하기

func Realm_delete()

{

    if let person = realm.objects(Person.self).filter(NSPredicate(format: "name = %@", "lion")).first

    {

        do

        {

            try realm.write

            {

                realm.delete(person)

            }

        }

        catch

        {

            print("\(error)")

        }

    }

}

Realm_delete()

3.5(Realm)

name이 lion인 행이 사라졌음을 확인할 수 있습니다.

 

이상 Realm 라이브러리 설치와 연동 및 사용법에 대해서 알아보았습니다.

 

감사합니다.