본문 바로가기

Android Studio

Realm 다중 모델 사용하기 - Android

반응형

안드로이드 Realm DataBase

보통은 Realm의 data model class는 하나만 사용하지만 혹시라도 두 개 이상을 사용해야 

한다면 어떻게 초기화 하는지 알아보겠습니다. 

혼자 배우면서 어플을 만들다 보니 틀린 부분도 있을 수 있으니 참고하시기 바랍니다.

Realm 초기화 설정에 대한 설명은 따로 하지 않겠습니다.

 

사용된 Realm의 버전은 classpath "io.realm:realm-gradle-plugin:5.15.1"

 

Realm의 데이터 모델이 하나라면 RealmActivity.java를 만들어

@SuppressLint("Registered")
public class RealmActivity extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        Realm.init(this);

        RealmConfiguration realmConfig = new RealmConfiguration.Builder()
                .name("datasave.realm")
                .schemaVersion(1)
                .build();
        Realm.setDefaultConfiguration(realmConfig);
    }
}

초기화한 후 사용할 java 파일에서 

Realm realm = Realm.getDefaultInstance();

이렇게 불러오면 됩니다.

하지만 데이터모델이 두 개 이상이면 다른 방식의 초기화가 필요합니다.

데이터 모델이 두 개가 있다는 가정하에

하나는 TestDataA.java

public class TestDataA extends RealmObject {
    @PrimaryKey
    private int count;
    private String name;

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

두 번째는 TestDataB.java

public class TestDataB extends RealmObject {
    @PrimaryKey
    private int count;
    private String name;

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

두 개의 데이터 모델을 만들었습니다. 

이렇게 만든 데이터 모델을 RealmModule에 정의해 줍니다.

RealmTestModuleA.java를 하나 만들어

@RealmModule(classes = {TestDataA.class})
public class RealmTestModuleA {
}

다음 RealmTestModuleB.java를 역시 하나 만들어서

@RealmModule(classes = {TestDataB.class})
public class RealmTestModuleB {
}

이렇게 두 개의 데이터모델을 역시 두개의 Realm Module로 정의해 주었습니다.

이제 불러오기만 하면 됩니다.

MainActivity에서 첫 번째 module을 불러온다면

public class MainActivity extends AppCompatActivity {
    private Realm realm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RealmInit();
    }

    private void RealmInit() {
        RealmConfiguration testConfig = new RealmConfiguration.Builder()
                .name("testdata.realm")
                .schemaVersion(1)
                .modules(new RealmTestModuleA())
                .build();
        realm = Realm.getInstance(testConfig);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        realm.close();
    }
}

이렇게 초기화해주면 우선 TestDataA 모델을 사용할 수 있습니다.

.name("testdata.realm") <- TestDataA의 데이터가 저장될 파일 이름

.schemaVersion(1) <- 버전 나중에 TestDataA의 내용이 변경 또는 추가된다면 버전업을 해서 관리해 주면 됩니다.

.modules(new RealmTestModuleA()) <- RealmTestModuleA.java 에서 정의된 TestDataA의 module

 

두 번째 모델의 초기화 역시 위에 내용과 같으며 초기화될 내용만 조금 변경해 주시면 됩니다.

private void RealmInit() {
        RealmConfiguration testbConfig = new RealmConfiguration.Builder()
                .name("testb.realm")
                .schemaVersion(1)
                .modules(new RealmTestModuleB())
                .build();

        realm = Realm.getInstance(testbConfig);
    }

.name("testb.realm") <- 데이터가 저장될 파일 이름을 정의해 주시고

.modules(new RealmTestModuleB()) <- module을 두 번째 만든 RealmTestModuleB.java로 초기화해 주시면 됩니다.

Fragment에서 하신다면 onStart()에서 초기화해주시고 닫을 땐 onStop()에서 realm.close(); 로 닫아 주시면 됩니다.

 

혼자 배우기 힘드네요. 더 좋은 방법 있으시면 알려 주세요~

보다 자세한 초기화 및 데이터 질의  쓰기 삭제 등등은 아래 링크에서 확인하시면 됩니다.

 

Realm 레퍼런스 가기

 

Realm: 리액티브 모바일 애플리케이션을 손쉽고 빠르게 만드세요

Realm Java is the first database built for mobile. An alternative to SQLite and ORMs that's fast, easy to use, and open source.

realm.io

반응형