데이터 저장소

  • 내부 저장소
    • 파일 소유한 앱에서만 액세스
    • 상대적으로 크기가 작음
  • 외부 저장소
    • 여러 파티션으로 나누어져 있기도 함
    • SD카드도 여기에 포함
    • 내부 저장소에 비해 공간이 큼
    • 보통 다른 앱과 공유가능한 미디어나 문서 파일 저장
    • 앱 전용 파일도 저장 가능

앱 전용 파일

<내부 저장소>

class MyViewModel(context: Context) : ViewModel() {
	private val fileInternal = File(context.filesDir, "appfile.txt")
	private val fileExternal = // 생략
	var valueInternal: String = readValue(fileInternal)
		set(v) {
			field = v
			writeValue(fileInternal, v)
		}
	var valueExternal // 생략 …
	private fun readValue(file: File) : String {
		return try {
		println("$file")
		// Internal Storage - /data/user/0/com.example.fileexample/files/appfile.txt
		// External Storage - /storage/emulated/0/Android/data/com.example.fileexample/files/appfile.txt
		file.readText(Charsets.UTF_8)
		} catch (e: Exception) {
		""
		}
}
private fun writeValue(file: File, value: String) {
	file.writeText(value, Charsets.UTF_8)
}

<외부 저장소>

class MyViewModel(context: Context) : ViewModel() {
	private val fileInternal = File(context.filesDir, "appfile.txt")
	private val fileExternal =
	if (isExternalStorageMounted) // 외부 저장소 사용 가능 여부 확인 – 다음 슬라이드에 나옴
		File(context.getExternalFilesDir(null), "appfile.txt")
	else
		fileInternal
	var valueInternal: // 생략
	var valueExternal: String = readValue(fileExternal)
	set(v) {
		field = v
		writeValue(fileExternal, v)
	}
	private fun readValue(file: File) : String { // 생략, 앞 슬라이드 참고 }
	private fun writeValue(file: File, value: String) {
	file.writeText(value, Charsets.UTF_8)
	}
	private val isExternalStorageMounted: Boolean
		get() {
			val state = Environment.getExternalStorageState()
			return state == Environment.MEDIA_MOUNTED
		}
  • Context의 저장소 경로 메소드 사용
  • 내부 저장소 또는 외부 저장소 사용
    • 내부 저장소: filesDir 속성, cacheDir 속성
    • 외부 저장소: getExternalFilesDir(null) externalCacheDir 속성(getExternalCacheDir())
  • 다른 앱에서 접근 불가, 앱 삭제 시 함께 삭제됨

프레퍼런스(Preference)

  • 키-값 형식으로 저장, 사용
  • 내부 저장소 사용, 다른 앱 접근 불가, 앱 삭제 시 함께 삭제됨
  • 비휘발성 데이터 저장
  • SharedPreferences 클래스 사용
    • 프레퍼런스의 데이터를 관리하는 클래스
    • *val* pref = PreferenceManager.getDefaultSharedPreferences(*this*)
    • 작업 후 apply() 함수를 통해 결과를 저장
  • 안드로이드 스튜디오에서 Settings Activity, Settings Fragment를 이용하여 쉽게 앱의 설정 UI로 생성 가능

공유 파일

  • 미디어나 문서 파일
  • 외부 저장소 사용, 다른 앱과 공유 가능
  • 공유 데이터 블롭

데이터베이스

  • Room 라이브러리를 이용하여 구조화된 형태로 데이터 저장
  • 예전엔 SQLite로 사용, 지금은 Room 권장

'Development > Kotlin&Android' 카테고리의 다른 글

브로드캐스트 리시버, 컨텐트 리졸버  (0) 2023.06.01
코루틴, 서비스, 권한  (0) 2023.05.30
메뉴와 네비게이션 UI  (0) 2023.05.09
프래그먼트(Fragment)  (0) 2023.04.29
액티비티와 인텐트  (0) 2023.04.13

+ Recent posts