개발자 끄적끄적

데이터 저장(File, Preference) 본문

안드로이드 프로그래밍

데이터 저장(File, Preference)

햏치 2023. 5. 18. 19:51

<안드로이드 앱에서 데이터 저장 방법>
- 앱 전용 파일
  - 내부 저장소 또는 외부 저장소 사숑
  - 다른 앱에서 접근 불가, 앱 삭제 시 함께 삭제

- 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