데이터 저장소
- 내부 저장소
- 파일 소유한 앱에서만 액세스
- 상대적으로 크기가 작음
- 외부 저장소
- 여러 파티션으로 나누어져 있기도 함
- 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 |