Prologue

이번주에는 내부 DB, Realm, SQLite에 대해 배워보겠습니다.

Subject

내부 DB


안드로이드 앱 개발을 하다보면 서버와 통신을 하면서 가끔 이런 생각을 하곤 합니다.

데이터가 어딘가에 저장되어 있어야 하는 건 맞고 서버랑 통신을 하긴 하는데, 굳이 이런 데이터까지 서버랑 통신을 해야하나… 혹은 오히려 서버랑 통신하면 더 불편할 정도로 정말 너무나도 간단한 데이터를 다루거나 서버한테 데이터를 맡기는 것보다는 내가 처리하는게 낫겠다라는 생각을 해본 적이 있습니다…(서버 디스는 아닙니다…^0^)

SharedPreference


  • 가장 간단하게 다룰 수 있는 데이터 저장 방식
  • 자동 로그인을 사용할 때 특히 많이 쓰임
  • 어플이 종료되어도 저장된 데이터는 사라지지 않음
  • 어플이 삭제되면 저장된 데이터는 증발
  • 요청한 데이터가 없을 때 기본값을 지정할 수 있음
  • 쿼리문이 없다.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
// SharedPreference에 저장
fun setId(context : Context, id : String){
val pref = context.getSharedPreferences(USER, Context.MODE_PRIVATE)
val editor = pref.edit()
editor.putString(ID,id)
editor.commit()
}

// SharedPreference에서 가져오기
fun getId(context : Context) : String{
val pref = context.getSharedPreferences(USER, Context.MODE_PRIVATE)
return pref.getString(ID, "")
}

Realm


  • 최근 각광받는 Mobile Database
  • 쿼리문을 사용하지 않음
  • 객체들로 하여금 데이터를 다룸
  • 어플이 종료되어도 데이터는 유지
  • 어플이 삭제되면 데이터는 증발
  • 일단 DB처럼 Primary Key를 필수로 지정해야 함
  • 데이터가 만일

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

// 데이터 저장 객체 생성
open class MemberVO : RealmObject(){
@PrimaryKey
var id : String = ""
var pwd : String = ""
}

// Realm 초기화
fun init(){
Realm.init(this)
memberRealm = Realm.getDefaultInstance()
}

// 데이터 가져오기
fun getMemberList(id : String) : RealmResults<MemberVO>{
return memberRealm.where(MemberVO::class.java)
.equalTo("id",id).findAll()
}

// 데이터 삽입
fun insertMemberList(){
memberVO = MemberVO()
memberVO.id = sign_id_edit.text.toString()
memberVO.pwd = sign_pw_edit.text.toString()

memberRealm.beginTransaction()
memberRealm.copyToRealm(memberVO)
memberRealm.commitTransaction()
}

// 데이터 삭제
fun deletePokemonList(name : String){
val result = pokemonRealm.where(PokemonVO::class.java)
.equalTo("name",name)
.findAll()

if(result.isEmpty()){
return
}

pokemonRealm.beginTransaction()
result.deleteAllFromRealm()
pokemonRealm.commitTransaction()
}

별도의 과제는 없고 내가 우아한 테크 캠프 코딩 테스트를 보느라 출석만 하고 바로 빠져나오는 바람에 세미나를 듣지 못하였다. 일단은 혼자 자료를 보면서 정리하였는데, 얼른 프로젝트를 보면서 혼자 만들어보면서 공부해야겠다.

공부한 다음에 Github에 코드를 올릴 예정이다.