개발자 끄적끄적
데이터 저장(File, Preference) 본문
<안드로이드 앱에서 데이터 저장 방법>
- 앱 전용 파일
- 내부 저장소 또는 외부 저장소 사숑
- 다른 앱에서 접근 불가, 앱 삭제 시 함께 삭제
- Preference
- 키 : 값 형식으로 저장, 사용
- 내부 저장소 사용, 다른 앱 접근 불가, 앱 삭제 시 함께 삭제
- 공유 파일
- 미디어나 문서 파일
- 외부 저장소 사용, 다른 앱과 공유 가능
- 공유 데이터 블롭(Shared Data Blobs)
- 안드로이드 11부터(API 30)
- 기계학습이나 미디어 재생 등에 사용할 매우 큰 공유 가능한 파일 생성/사용
- 데이터베이스
- Room 라이브러리를 이용하여 구조화된 형태로 데이터 저장
- 예전엔 SQLite로 사용, 지금은 Room 권장
<데이터 저장소>
- 내부 저장소(Internal Storage)
- 파일 소유한 앱에서만 액세스, 다른 앱은 접근 불가
- 상대적으로 크기가 작다
- 외부 저장소(External Storage)
- 여러 파티션으로 나누어져 있기도 한다
- SD카드도 여기에 속한다
- 내부 저장소에 비해 공간이 크다
- 보통 다른 앱과 공유가능한 미디어나 문서 파일 저장
- 앱 전용 파일도 저장 가능
<앱 전용 파일>
- Context의 저장소 경로 메소드 사용
- 내부 저장소를 사용할 때
- filesDir 속성(getFilesDir())
- cacheDir 속성(getCacheDir()), 임시 파일용
- 외부 저장소를 사용할 때
- getExternalFiles(null)
- externalCacheDir 속성(getExternalCacheDir()), 임시 파일용
- 안드로이드 4.4(API 19)이상에서는 별도의 권한 없이도 사용 가능
*권한(permission) : 안드로이드 보안 기능으로 앱이 시스템의 민감한 리소스를 사용하려고 할 때, 권한이 필요하며 이 권한은 사용자가 명시적으로 승인해야 한다
<외부 저장소 사용 가능 여부 확인>
- 외부 저장소는 마운트 되지 않은 경우고 고려해야한다
- SD카드인데 카드가 제거된 경우
- 실제로 외부 저장소가 SD카드가 아니라 내부에 있기 때문에 마운트 되지 않은 경우는 거의 없다
<프레퍼런스(Preference)>
- 프로그램의 설정 정보(사용자의 옵션 선택 사항이나 프로그램의 구성정보)를 영구적으로 저장하는 용도로 사용
- XML 포맷의 텍스트 파일에 정보를 저장
- 프레퍼런스는 키와 값의 쌍으로 데이터를 저장
- 키는 정보의 이름이며 값은 정보의 실제값
- 응용 프로그램 내의 액티비티 간에 공유하며, 한 쪽 액티비티에서 수정 시 다른 액티비티에서도 수정된 값을 읽을 수 있다
- SharedPreferences 클래스
- 프레퍼런스의 데이터를 관리하는 클래스
<SharedPreferences 객체 얻기>
- SharedPreferences 객체를 얻는 방법
- Context.getSharedPreferences(name:String!, mode:Int)
- 첫 번째 인자 : 프레퍼런스를 저장할 XML 파일 이름
- 두 번째 인자 : 동작 모드, 0이나 MODE_PRIVATE으로 쓰면 된다
- 리턴된 SharedPreferences 객체를 이용하여 읽거나 쓰기
<프레퍼런스의 데이터 읽기>
- 프레퍼런스에 저장된 여러 파입의 정보를 SharedPreferences 객체의 다음 메서드를 이용하여 읽을 수 있다
- getInt(key:String!, defValue : Int) : Int
- getString(key:String!, defValue : String) : String
- getBoolean(key:String!, defValue:Boolean) : Boolean
- key 인자 : 데이터의 이름 지정
- defValue 인자 : 값이 없을 때 적용할 티폴트 지정
<프레퍼런스에 데이터 저장하기>
- SharedPreferences.Editor 이용하여 프레퍼런스에 값을 저장
- SharedPreferences 객체의 edit() 메서드를 호출하여 Editor 객체를 가져온다
- SharedPreferences.Editor 객체에는 값을 저장하고 관리하는 메서드가 제공된다
- putInt(key:String!, value:Int)
- putBoolean(String! value:Boolean)
- putString(String! key)
- remove(String! key) : 특정 키, 값 삭제
- clear() : 모든 키, 값 삭제
- apply() : 변경 사항 적용, 마지막에 반드시 호출해야 한다
- Editor는 모든 변경을 모아 두었다가 apply() 메소드를 통해 한꺼번에 적용
<Preference Fragment)>
- 앱의 설정 UI를 쉽게 만들 수 잇는 방법
- XML로 작성된 설정 구성을 읽어서 UI 프래그먼터를 생성
- Preference를 이용하여 설정 값을 읽거나 저장, 티폴트 프레퍼런스 사용
- pref = PrefereneceManager.getDefaultSharedPreferences(context)
- 안드로이드 스튜디오에서
- File > New > Activity > Settings Activity를 하면 프래그먼터와 액티비티를 생성
- File > New > Fragment > Settings Fragment를 하면 프래그먼트만 생성
- build.gradle에 preference library dependency도 자동으로 추가된다
- implementation 'androidx.preference:preference:1.1.0'(참고 : -ktx로 변경은 직접 변경)
- res/xml/root_preferences.xml은 설정 구성 파일, 원하는 내용으로 변경 필요
- PreferenceFragmentCompat를 상속하여 프레퍼런스 프래그먼트 클래스 생성
'안드로이드 프로그래밍' 카테고리의 다른 글
Coroutin, Service (0) | 2023.05.30 |
---|---|
목록표시 UI (0) | 2023.05.14 |
메뉴(Menu), 다이얼로그(Dialog), 네비게이션(Navigation) UI (0) | 2023.05.07 |