본문 바로가기
Android

Android/Kotlin - 내부저장 Shared Preferences vs Data Store vs Room

by 오늘도 깨달았다 2022. 8. 9.
반응형

작성이유

디바이스에 영구저장 되어야 하는 데이터를 관리하기 위한 방법을 찾은 과정을 기록 

 

 

왜 Shared Preferences를 사용 안 하고?

: 현재 안드로이드에서 Data store의 사용을 적극 권장 (개발자 문서에서도  SharedPreferences 사용 가이드를 뺌)

  • 실제 xml 파일 I/O 작업을 하는 것으로  UI Thread에서 작업할 경우 안전하지 않다.
  • Runtime Exception으로부터 안전하지 않다.
  • 비동기 API를 제공하지만 리스너를 통해서만 값을 읽을 수 있다.
  • Type-Safety를 제공하지 않는다. 
  • 값 변경 시 리스너를 통해서만 비동기식 액세스를 제공 
  • 데이터 타입을 변경하면서 생기는 런타임에러, ANR 

Data Store?

  • SharedPreferences를 대체하기 위해 Jetpack에서 발표한 라이브러리
  •  Kotlin coroutine과 Flow를 사용하여 비동기적으로일관되게 데이터를 저장할 수 있다

Preferences DataStore

  • key - value 형태로 저장
  • Type-Safety를 제공 X

 

 

Proto DataStore

  • Protocol buffer를 통해 저장 
  • 미리 정의된 스키마를 통해 Type_Safety 보장 

 

 

-> 키-밸류 형태라서 리스트로 저장되어야 하는 최근 검색어 데이터와는 적합하지 않다 느낌

 

*상황별 권장 라이브러리 

  • 작은양의 데이터 저장 ? -> Preferences
    • 앱의 야간모드 또는 다크모드에 대한 저장
    • 사용자가 앱을 처음 실행할 때의 상태 저장 
    • 항목 목록에 대한 사용자 정렬 순서 저장 
  • 많은 양의 데이터 저장? -> Room
    • 사용자가 즐겨찾기로 표시한 노래 목록 저장
    • 게시물 목록 저장 

Room

  • SQLite의 추상 레이어를 제공하여 SQLite의 객체를 매핑하는 역할 -> SQLite의 기능을 모두 사용할 수 있고, DB로서의 접근을 편하게 도와주는 라이브러리 
  • SQLite를 직접 사용하는 것보다 무의미한 보일러플레이트 코드의 반복을 줄일 수 있고 컴파일 시간을 체크할 수 있다.

 

 

아파트이름, 두가지 pk 데이터를 저장해야 하므로 키-밸류보단 sql같은 형식으로 관리하는게 데이터 정제 및 관리에 용이하다고 판단함

반응형

댓글