본문 바로가기
Android 개발/Room, Realm, Databases

Realm Module 을 이용해서 멀티 Schema 활용하기

by Developer88 2017. 2. 25.
반응형

안드로이드 앱을 만들다보면, 

미리 준비해 놓고Local DB파일에서, data를 읽어와서 유저에게 보여주는 경우도 있고,

유저가 Favorite 해놓은 데이터들을 DB로 저장해야 하는 경우도 있습니다.


그렇다면, 미리 정의해서 앱내로 가져온 LocalDB파일의 Schema와

유저의 Favorite정보를 저장하는 Schema두개가 생길수가 있는데요.

특히나, LocalDB파일의 데이터가 업데이트를 통해서 다운로드해야 되는 경우라면, 특히 

건드리지 않는 것이 좋겠지요.


이럴때, Realm에서는 각각 다른 Module을 사용해서,

각각의 Schema를 만들고 수정할 수 있는데요.

오늘은 그것에 관해서 정리해보겠습니다.



1. Realm Module 정의하기


Realm 모듈에 대해서 특별하게 기술하지 않는다면,

default.realm 파일에 RealmObject를 상속받는 모든 데이터 클래스에 관해서,

Schema를 저장하게 되는데요.


이, default.realm이외에 추가로 모듈을 만들고자 한다면,

아래와 같이 모듈 클래스를 생성해주면 됩니다.

Student.class와 Teacher.class를 StudentTeacherModule이라는 모듈로 묶어주겠습니다.




StudentTeacherModule외에, 아래와 같이 DriverModule도 하나 만들도록 하겠습니다.

여기에는 PrincipleDriver와 SchoolDriver class를 포함시키겠습니다.



이제 두개의 Module클래스파일이 만들어졌는데요.

그럼이제, 두개의 데이터를 한번 읽어보도록 하겠습니다.



2. Realm Module 초기화


위에서 두개의 모듈을 초기화 시켰는데요.

이 모듈들의 Realm객체를 각각 얻어와서 사용이 가능한데요.

RealmConfiguration 빌더를 통해서, 모듈을 지정해주고, realm파일을 지정해줍니다.

이렇게해서 두개의 모듈, 두개의 realm파일들에 대한 두개의 Realm객체를 얻어왔습니다.





2. Realm 객체 활용


위에서 얻어온 두개의 Realm객체는 각각 활용이 가능한데요.

mStudentTeacherRealm객체에 데이터를 하나 넣어보겠습니다.




이제 위에서 쓴 데이터를 한번 읽어와 보겠습니다.



아래와 같이 김선생을 읽어온 것을 알 수 있습니다.


mDriverRealm에도 똑 같은 방식으로 활용이 가능합니다.


3. 공통의 모델클래스를 가진 Realm 모듈의 활용


만약, 각각의 모듈이 공통의 모델클래스를 가지고 있다면, 어떻게 될까요. 

Realm에는 copyToRealm이라는 메소드가 있어서, 

데이터 객체를 복사해올 수 있는데요.


이를 이용하면 A모듈에 있는 데이터를 조회해서, B모듈에 그대로 전달이 가능합니다.
코드를 구현하면서 정리해보겠습니다.


선생님이 학교차를 운전도 가능다고 보고, DriverModule에 포함시켜보겠습니다.




이제, 생성했던 "김선생"님을 StudentTeacherModule에서 읽어와서,

copyToRealm 메소드를 이용해서 DriverModule로 옮겨보도록 하겠습니다.




마찬가지로, 버튼을 누르면, 드라이버모듈의 Teacher를 조회해서 텍스트뷰에 넣어보겠습니다.




네, 역시 잘 동작합니다.


728x90

댓글