-Realmํ ์ดํฐ๋ฒ ์ด์ค๋ ์คํ ์์ค๋ก ๋ชจ๋ฐ์ผ ์ฌ์ฉ์ ์ดค์ ํ๋ ๋ด์ฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๋ค.
- ORM*๊ณผ ๊ฐ์ ๋ฐ์ด๋ ์ฌ์ฉ์ฑ
- ์คํ์์ค๋ผ์ ์ฌ์ฉํ๊ธฐ ์ฌ์
- ์ฝ๋๊ฐ ๊ฐ๋จํจ
-
ORM(Object-relational mapping): ๋จ์ํ๊ฒ ํํํ๋ฉด ๊ฐ์ฒด์ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ์ ์ค์
ORM์์ ๋งํ๋ ๊ฐ์ฒด์ ์๋ฏธ๋ ์ฐ๋ฆฌ๊ฐ ํํ ์๊ณ ์๋ OOP(Object Oriented Programming)์ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค. OOP๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋จ์ ๋งํ๋ฉฐ ์ฌ๊ธฐ์์์ ๊ฐ์ฒด๋ ์ ์ฅ๊ณต๊ฐ์์ ํ ๋น๋์ด ๊ฐ์ ๊ฐ์ง๊ฑฐ๋ ์๋ณ์์ ์ํด ์ฐธ์กฐ๋๋ ๊ณต๊ฐ์ ์๋ฏธ ํ๋ค.
http://cocomo.tistory.com/409 sqlLite ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
Realm list๋ ๋ณด๋ฐ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค Api์ค ํ๋์ด๋ค. listํด๋์ค๋ ๊ฐ์ฒด๊ฐ์ ์ผ๋๋ค ๊ด๊ณ๋ฅผ ์ํด ์ฌ์ฉํ๋ค.
####realm ๊ณผ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น๊ต
์์ ์ฌ์ง๊ณผ ๊ฐ์ด ๋ณต์กํ ๊ด๊ณ๋ฅผ ๊ฐ๊ณ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๋ฉด ๋ช ๊ฐ์ ๊ธฐ๋ฅ๋ง ์ถ๊ฐํ๋๋ผ๋ ๋ ์ฝํ๊ฒ ๋๋ค.
๋๋ช ์ ์ฌ์ฉ์๊ฐ ์๋ ๊ฒฝ์ฐ ๊ทธ๋ค์ ์ ๋ณด๊ฐ ์๊ณ ์ถ๋ค๋ฉด, user์ repositories ๋ด์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๋งํฌํด์ ์ฐพ์ ๋ด์ผ ํ๋ค . ๊ฒ๋ค๊ฐ ์ด๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ์ ๋ ๋ง๋ค ์ค์ ๋ก ๊ฐ์ ธ์ฌ ๋๊ฐ์ ๋ ์ฝ๋๋ฅผ ๋งค๋ฒ ์ฐพ์๋ด๋ ์์ ์ ํด์ผํ๋ค. ํ๋์ ๋ด๋ ๊ทธ๋ ๊ฒ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด ์๋๋ค. ๊ทธ๋์ join๋ฅผ ์ฌ์ฉํ์ฌ ๊ถํ์ ๋ฐ๋ก ๋ถ์ฌํ๊ธฐ๋ ํ๋ค.
ํ์ง๋ง Realm๋ชจ๋ฐ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ์ joinํ์ง ์์ผ๋ฉด sql ์ฟผ๋ฆฌ๋ ์ฌ์ฉํ์ง ์๋๋ค. Realm ๋ชจ๋ฐ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ฑฐ์ ๋์ผํ๋ค. ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ๋ ๋ถ๋ชจ๋ ์ผ๋ฐ์ ์ผ๋ก ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ์ง ์๊ณ ํฌ์ธํฐ๋ง ์ ์งํ๋ค.
List๋ ์ผ๋๋ค ๊ด๊ณ๋ฅผ ์ ๋ง ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด ์ค๋ค. Array์ ๊ฑฐ์ ๋น์ทํ๊ฒ ์๋ํ๋ฉฐ, ๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋ ์์๋ฅผ ์ ์งํ๊ณ , ๊ฐ์ฒด๋ฅผ ํน์ ์ธ๋ฑ์ค์ ์ถ๊ฐ,์ ๊ฑฐํ๊ฑฐ๋ ์ด๋ํ๋ ๋ฉ์๋๋ ์ ๊ณตํ๋ค. List์ ์ ์ฅ๋์ด์๋ ๊ฐ์ฒด ์์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํ ์ง์ ์ ์ธ ์ธ๋ฑ์ค ๋ชฉ๋ก๋ง ์ ์ฅํ๋ค.
Realm์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ realm.createObject
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ฉ์๋๋ *Proxy๊ฐ์ฒด๋ก ๋ง๋๋ ๊ฐ๋
์ด๋ค.
Realm ๊ฐ์ฒด๊ฐ ํธ์ถ๋๋ฉด ๋ด๋ถ์ ์ผ๋ก ํ ์ด๋ธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์์ ๋น์ด์๋ row๋ฅผ ๋ง๋ค๊ณ ์ ๋ฌํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค. realm์์ ์ฌ์ฉํ๋ Schemam๋ ์ผ์ข ์ *๋ฉํ๋ฐ์ดํฐ์ด์ ๋ชฐ๋ธ๊ณผ ์ฐ๊ด๋ reamlObjectSchema์ table์ ๊ด๋ฆฌํ๋ค. ํ ์ด๋ธ ๊ฐ์ฒด๋ฅผ ์ง์ ํธ์ถ ํด์ ๋ฉ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค ์ ์์ง๋ง ์ง์ ํธ์ถํ์ง ์๊ณ Poxy๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
Realm java ๊ฐ์ฒด๋ Proxy ๊ฐ์ฒด๋ฅผ ๊ฑฐ์น๊ณ JNI๋ฅผ ํธ์ถํด์ ๋ง์ง๋ง์ผ๋ก Table.cpp๋ผ๋ C++๋ก ๋ง๋ค์ด์ง ์ฝ์ด ๊ฐ์ฒด ์์ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๊ฒ ๋๋ค.
public long addColumn(RealmFieldType type, String name, boolean isNullable) {
verifyColumnName(name);
return nativeAddColumn(nativePtr, type.getNativeValue(), name, isNullable);
}
Table.java์ ์ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด addCoumn์ด๋ผ๋ ๋ฉ์๋ ๋ด์์ JNI์ฝ๋๋ฅผ ํธ์ถํ๋ nativeaddColumn ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ์ด๋ฅผ ํธ์ถํ๋ฉด C++๋ก ๋ JNI๊ฐ ํธ์ถ๋๊ณ , ์ค์ ๋ก Table.cpp๋ฅผ ํธ์ถํด์ add_column๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
Proxy: ์ค์ ๋ก ์ก์ ์ ์ทจํ๋ ๊ฐ์ฒด๋ฅผ ๋์ ํด์ ๋๋ฆฌ์ ์ญํ ๋ฅผ ํด์ค๋ค. ํ๋ก์ ํจํด์ ์ฌ์ฉํ๋ฉด ํ์์ ๋ฐ๋ผ ๊ฐ์ฒด๋ฅผ ์์ฑ์ํค๊ฑฐ๋ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์๋ ์ด์ ์ด ์๊ธด๋ค.
๋ฉํ๋ฐ์ดํฐ: ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ผ๊ณ ํ ์ ์๋ค.
๋จผ์ ์์ ์ฌ์ง์ ์๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:5.3.1"
}
}
์ถ๊ฐํ ๋ค์ build.gradle(app)์ ๊ฐ์ ๋ค์ ์ฝ๋๋ฅผ ๋งจ ์๋์ ์ถ๊ฐํ๋ค.
apply plugin: 'realm-android'
๋ชจ๋ธ ํด๋์ค ์ ์
public class Dog extends RealmObject {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Realm๋ฐ์ดํฐ ์ธ๋ ๊ผญ ํด์ค์ผํ๋ ๊ฒ
//realm ์ด๊ธฐํ
Realm.init(context);
//์ด ์ค๋ ๋์ ๋ํ Realm ์ธ์คํด์ค ๊ฐ์ ธ์ค๊ธฐ
Realm realm = Realm.getDefaultInstance();
insert
Realm mRealm;
// ํธ๋์ญ์
์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ํํฉ๋๋ค
mRealm.beginTransaction();
Dog dog=mRealm.createObject(Dog.class);
dog.setName("๋ฉ๋ฉ์ด");
dog.setAge(3);
mRealm.commitTransaction();
Select
Realm mRealm;
//select All
RealmResults<Dog> result=mRealm.where(Dog.class).findAll();
for(int i=0;i<result.size();i++){
Dog dog=result.get(i);
dog.getName();
dog.getAge();
}
//db์ ์ ์ฅ๋์ด ์๋ ์ฒซ๋ฒ์งธ๊บผ select
Dog dog=mRealm.where(Dog.class).findFirst();
dog.getName();
dog.getAge();
//db์ ์ ์ฅ๋์ด ์๋ ๊ฒ ์ค์ ์์ ์ด ์ํ๋ ๊ฑฐ ์ถ๋ ฅ
Dog dog=mRealm.where(Dog.class).equalTo(name,"๋ฉ๋ฉ์ด").findFirst();
dog.getName();
dog.getAge();
Delete
Realm();
mRealm.beginTransaction();
RealmResults<DB> results=mRealm.where(DB.class).findAll();
results.deleteAllFromRealm();//์ ๋ถ ์ญ์
mRealm.commitTransaction();
Realm();
mRealm.beginTransaction();
RealmResults<DB> results=mRealm.where(DB.class).findAll();
results.deleteFromRealm(0); 0๋ฒ์งธ ์ธ๋ฑ์ค๊ฐ ์ญ์
mRealm.commitTransaction();
*๊ฐ์ฅ ๋์ค์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ 0๋ฒ์งธ์
Between
Realm();
RealmResults<DB> results=mRealm.where(DB.class).between("age",start,finish).findAll();
for(int i=0;i<results.size();i++){
DB db=results.get(i);
Toast.makeText(getApplication(),"์ด๋ฆ:"+db.getName()+"
๋์ด:"+db.getAge()+"๊ฐ์:"+String.valueOf(i+1),Toast.LENGTH_LONG).show();
}
์ถ์ฒ:
https://academy.realm.io/kr/posts/realm-api-optimized-for-performance-and-low-memory-use/ (realm ๋ฆฌ์คํธ)
https://academy.realm.io/kr/posts/realm-api-optimized-for-performance-and-low-memory-use/ (realm object ์ค๋ช )
https://realm.io/kr/docs/java/latest/ (realm ์์ )