본문 바로가기
Android

SharedPreference, DataStore

by Ejay 2025. 5. 12.

 

Data Type

  • Database (SQLlite) 
  • Preference 
  • File

SQLlite

 

Table로 저장됨

 

ID NAME ADDR
1 kim seoul
2 lee incheon

 


Preference

 

key <-> value

영속저장(File) - xml (기초타입 data만 가능)

대개 설정 data를 사용

Activity.getPreferences(int mode)
Context.getSharedPreferences(String name, int mode)

 

getPreferences(int mode) > 단일 액티비티에서 사용하며 매개변수로는 액티비티명(File명)을 보낸다.

getSharedPreferences(String name, int mode) > 앱 전체의 데이터를 키 값 형태로 저장할 때 사용

 

 

액티비티의 데이터 저장

val sharedPref = getPreferences(Context.MODE_PRIVATE)
앱 전체의 데이터를 키-값 형태로 저장하려고 객체를 얻을땐 아래의 코드를 이용

val sharePref = getSharedPreferences("myprefs", Context.MODE_PRIVATE)

 

 

데이터를 저장하려면 다음과 같은 SharedPreferences.Editor 클래스의 함수 이용

  • putBoolean(String key, boolean value)
  • putInt(String key, int value)
  • putFloat(String key, float value)
  • putLong(String key, long value)
  • putString(String key, String value)
val data1 = sharedPref.getString("data1", "world)

 

데이터의 저장을 위해 최종 commit()혹은 apply()함수를 호출한다. (동기, 비동기) 성공 여부를 확인해야 하는 경우에만 commit()사용

특성 commit() apply()
실행 타입 동기 비동기
반환값 성공/실패여부 boolean 없음

 

https://github.com/aabc88/android_Kotlin/commit/de7d74995784297d9fb49b0118289a49f64b951a#diff-d6eda860cca0258465d5ab8ac5223ee41665ee7757b667d98e0ffe20ad25f6eb

 

SharedPreference · aabc88/android_Kotlin@de7d749

+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)

github.com

 

특성 SharedPreferences Preferences DataStore
API타입 동기식(+비동기 콜백) 완전 비동기(코루틴)
메인 스레드 안정성 위험(commit() 사용 시 블로킹) 안전 (메인스레드 블로킹 없음)
데이터일관성 부분보장 트랜잭션기반 완전보장
다중프로세스 지원부족 안정적지원
업데이트감지 리스너패턴(콜백) Flow를 통한 반응형 스트림
에러처리 제한적 구조화된 예외처리
타입안정성 없음 키 정의를 통한 기본적타입 안정성

 

implementation("androidx.datastore:datastore-preferences:1.1.6")
-------------------------------------------------------------------

Datastore객체획득
val dataStore: DataStore<Preferences> by preferencesDataStore("my_prefs")
-------------------------------------------------------------------

stringPreferencesKey("key")
int "
double " 등
-------------------------------------------------------------------

val USER_NAME = stringPreferencesKey("user_name")

-------------------------------------------------------------------

데이터 저장
dataStore.edit { preferences ->
	preferences[USER_NAME] = "kim"
}

데이터 획득
dataStore.data.collect{}

 

 

https://github.com/aabc88/android_Kotlin/commit/f668e18a54ea3a4e5ec4718bb6104b35a9df0d2b

 

DataStore, Coroutine · aabc88/android_Kotlin@f668e18

+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)

github.com

 


File

 

안드로이드에서 파일을 다룰 땐 대부분 java.io패키지에서 제공하는 클래스를 이용.

 

  • File : 파일 및 디렉터리를 지칭하는 클래스
  • FileInputStream / FileOutputStream : 파일에서 바이트 스트림으로 데이터를 읽거나 쓰는 클래스
  • FileReader / FileWriter : 파일에서 문자열 스트림으로 데이터를 읽거나 쓰는 클래스

 

반응형

'Android' 카테고리의 다른 글

Camera  (0) 2025.05.13
ADB로 APK 설치하기  (0) 2024.12.01
[Android] BindingAdapter  (0) 2022.12.12
[Android] MVVM 패턴 (feat. DataBinding)  (0) 2022.12.12