Android는 다른 플랫폼의 디스크 기반 파일 시스템과 유사한 파일 시스템을 사용합니다.
시스템은 앱 데이터를 저장할 수 있는 몇 가지 옵션을 제공합니다.
데이터 및 파일 저장소 개요
- 앱별 저장소(App-specific storage) : 내부 저장소 또는 외부 저장소 안의 특정 디렉토리에 자신의 앱만이 전용으로 사용할 수 있는 파일을 저장합니다.
- 공유 스토리지 : 앱이 미디어, 문서 및 기타 파일을 포함하여 다른 앱과 공유하려는 파일을 저장합니다.
- Preferences : 키-값 쌍에 개인용 기본 데이터를 저장합니다.
- 데이터 베이스 : Room 지속성 라이브러리를 사용하여 구조화 된 데이터를 비공개 데이터베이스에 저장합니다.
이러한 옵션의 특성은 다음 표에 요약되어 있습니다.
콘텐츠 유형 | 접근 방법 | 권한이 필요한지 | 다른 앱이 접근 가능한지 | 앱이 삭제될 때 파일들이 삭제되는지 | |
앱 별 저장소 | 자신의 앱만이 사용할 수 있는 파일들 | - 내부 저장소 접근 getFilesDir() 또는 getCacheDir() - 외부 저장소 접근 getExternalFilesDir() 또는 getExternalCacheDir() |
- 내부 저장소 필요하지 않음 - 외부 저장소 Android 4.4 (API 레벨 19) 이상을 실행하는 기기에서 앱을 사용하는 경우 필요하지 않습니다. |
No | YES |
공유 스토리지 (Media) | 공유 가능한 미디어 파일 (이미지, 오디오 파일, 비디오) | MediaStore API | Android 11 (API 레벨 30) 이상에서 다른 앱의 파일에 액세스 할 때 READ_EXTERNAL_STORAGE Android 10 (API 레벨 29)에서 다른 앱의 파일에 액세스 할 때 READ_EXTERNAL_STORAGE 또는 WRITE_EXTERNAL_STORAGE |
가능,하지만 접근하려는 앱에는 READ_EXTERNAL_STORAGE 권한이 필요합니다. | No |
Preferences | 키-값 쌍 데이터 | None | No | YES | |
데이터 베이스 | 구조화 된 데이터 | Room Persistenr library SQLite | None | No | YES |
앱 별 저장소
Android는 두 가지 유형의 실제 저장소 위치, 즉 내부 저장소 및 외부 저장소를 제공합니다. 대부분의 기기에서 내부 저장소는 외부 저장소보다 작습니다. 그러나 내부 저장소는 모든 기기에서 항상 사용할 수 있으므로 앱이 신뢰하는 데이터를 더 안정적으로 보관할 수 있는 저장 위치입니다.
내부 저장소
내부 저장소는 위에서 말했듯이 어느 스마트폰에서나 제공하므로 항상 이용할 수 있습니다.
앱을 설치할 때 해당 앱을 위한 저장 공간이 할당됩니다.
한 디렉터리는 앱의 영구 파일 용으로 설계되고 다른 디렉터리에는 앱의 캐시 된 파일이(임시 파일) 포함됩니다.
앱에는 이러한 디렉터리의 파일을 읽고 쓰는 데 시스템 권한이 필요하지 않습니다.
이 공간에 저장한 파일은 해당 앱에서만 접근 가능하며, 이 공간은 앱이 삭제되면 함께 제거됩니다.
그러나 이러한 디렉토리는 작은 경향이 있습니다. 앱 별 파일을 내부 저장소에 쓰기 전에 앱에서 기기의 여유 공간이 얼마나 있는지 확인해야 합니다.
영구 파일에 접근하기
앱의 일반 영구 파일은 컨텍스트 개체의 filesDir 속성을 사용하여 액세스 할 수 있는 디렉터리에 있습니다.
프레임 워크는이 디렉토리에 파일을 액세스하고 저장하는 데 도움이 되는 몇 가지 방법을 제공합니다.
파일 API를 사용하여 파일에 액세스하고 저장할 수 있습니다.
val file = File(context.filesDir, filename)
중첩된 디렉터리 만들기
context.getDir(dirName, Context.MODE_PRIVATE)
캐시 파일 만들기
민감한 데이터를 일시적으로 만 저장해야하는 경우 내부 저장소 내 앱의 지정된 캐시 디렉터리를 사용하여 데이터를 저장해야 합니다.
File.createTempFile(filename, null, context.cacheDir)
앱은 컨텍스트 개체의 cacheDir 속성과 File API를 사용하여이 디렉터리의 파일에 액세스 합니다.
val cacheFile = File(context.cacheDir, filename)
캐시 파일 삭제하기
Android가 때때로 자체적으로 캐시 파일을 삭제하더라도 이러한 파일을 정리하기 위해 시스템에 의존해서는 안됩니다. 항상 내부 저장소 내에 앱의 캐시 파일을 유지해야 합니다.
cacheFile.delete()
외부 저장소
반면에 외부 저장소는 USB 같은 장치들이 제거될 수 있어서 사용하지 못할 수 있습니다. 그러므로 외부 저장 공간을 이용할 때 외부 저장소를 사용할 수 있는지 확인하는 코드가 있어야 합니다.
SD 카드와 같은 이동식 볼륨은 파일 시스템에 외부 저장소의 일부로 표시됩니다. Android는 /sdcard와 같은 경로를 사용하여 이러한 기기를 표시합니다. 이동식 저장 장치 없이 영구 저장소에 내부, 외부 파티션을 나누어 항상 두 개의 저장공간을 외부 저장소로 제공하는 경우도 있습니다.
Environment.class
안드로이드에서 저장소와 관련된 정보는 Environment 클래스를 사용해 얻을 수 있습니다.
- Environment.getExternalStorageState(): 외부 저장 공간 상태
- Environment.getExternalStorageDirectory().getAbsolutePath(): 외부 저장 공간 경로
- Environment.getDataDirectory().getAbsolutePath(): 내부 저장 공간 경로
참고 : https://developer.android.com/training/data-storage?hl=en
'Android > 개념 및 예제' 카테고리의 다른 글
Android 소리나는 카운트 다운 타이머 만들기 (CountdownTimer + SoundPool) (0) | 2021.09.26 |
---|---|
SharedPreference로 데이터 저장하기 (0) | 2021.05.18 |
안드로이드 퍼미션 개념 정리 (0) | 2021.05.18 |
Realm를 사용해서 안드로이드 앱에 데이터 저장하기 (0) | 2021.05.14 |
Android SQLite를 사용하여 데이터를 저장하기 (0) | 2021.05.14 |