[Realm] Realm 사용기
Dec 23, 2019 23:01 · 396 words · 1 minute read
- 기존의 SharedPreference + SQLite 로 이루어진 로컬db를 Realm 으로 교체하기 위함
특징
Realm 의 테이블은 java 에서 사용하는 클래스파일로 대체 된다.
public class Sample extends RealmObject { private String vehicleId; private int vehicleName; }
클래스 내부에 필요한 컬럼을 넣을 수 있고 getter & setter 로 일반 클래스처럼(setter 는 트랜잭션 내에서만 가능) 사용할 수 있다.
사용하기
컬럼마다 업데이트를 하던 기존 데이터베이스와 달리 지정한 PrimaryKey를 비교하여 존재하지 않으면 쓰기를, 존재하면 오브젝트 자체를 업데이트 할 수 있다.
realm.copyToRealmOrUpdate(RealmObject);RealmObject -> JSONObject 로 바꾸러면 Gson 등을 이용해야 하는데, 데이터베이스에서 불러온 객체의 경우 바로 gson 을 사용할 수가 없다. 이는 realm 의 무복제 메커니즘 때문인데, 실제 사용전에는 Java Heap 으로 복사되지 않는다. 그래서 실제 데이터를 사용해야할 때, 아래와 같이 복사하여 사용한다.
RealmObjectSample sample = realm.where(RealmObjectSample.class).findFirst(); sample = realm.copyFromRealm(sample);
한 A(RealmObject 클래스) 안에 다른 B(RealmObject 객체)가 들어있다면 A를 realm 에 저장할 시 A객체 안의 B가 null 이 아니라면 B를 직접 B클래스에 인설트 하지 않아도, B 클래스 테이블 안에 B가 자동으로 저장된다.