[안드로이드/Android] Shared Preferences와 내부 저장소(Internal Storage)

Posted by 앱해피
2015. 6. 22. 12:17 안드로이드 이론

 

안드로이드(Android) 저장 옵션(Storage Options)

 

안드로이드에서는 어플리케이션에서 사용하는 데이터를 영구적으로 저장할 수 있도록 개발자에게 여러가지 옵션을 제공한다. 다양한 옵션 중에서 무엇을 선택할 것인지는 당신의 하고자 하는 것에 달려있다.

저장하고자 하는 데이터를 1)자신이 속한 어플리케이션에서만 사용할 수 있도록 할 것인지, 아니면 2)다른 어플리케이션에서도 해당 데이터에 접근하도록 할 것인지에 따라 저장 옵션이 달라질 수 있고, 또는 저장하고자 하는 데이터의 크기(양)에 따라서 저장 옵션이 달라질 수 있다.

 

Shared Preferences

 

키-값 쌍으로 자바의 기본 데이터 타입을 저장한다.

 

Internal Storage

 

어플리케이션에서만 사용할 수 있는 데이터를 저장한다.

 

External StorageStore

 

여러 어플리케이션에 의해 공유될 수 있는 외부 저장소에 데이터를 저장한다.

 

SQLite Databases

 

특정 어플리케이션 데이터베이스에 구조화된 데이터를 저장한다.

 

Network Connection

 

자신의 네트워크 서버를 이용해 웹에다 데이터를 저장한다.

 

* 안드로이드는 내용 제공자(Content Provider)를 이용해서 특정 어플리케이션에서만

사용되는 데이터를 외부 어플리케이션으로 제공할 수 있는 방법도 제공한다.

 

내용 제공자(Content Provider)는 특정 어플리케이션의 데이터에 읽기/쓰기 접근을 할 수

있도록 하는 옵션을 제공하는 컴포넌트다. 

 

Shared Preferences(공유 프리퍼런스)

 

SharedPreferences 클래스는 개발자로 하여금 기본 데이터 타입의 키-값 쌍의 형태로 데이터를

저장하거나 읽어올 수 있도록 해주는 일반적인 프레임워크를 제공한다.


boolean, float, int, long, string과 같은 기본 데이터 타입을 SharedPreferences를 이용해서 저장할 수 있다. 사용자는 이 방법을 이용해서 저장된 데이터에 계속 접근할 수 있다.

 

SharedPreferences 객체를 얻기 위해서는 2가지 방법 중 하나를 이용해야 한다.

 

getSharedPreferences()

 

이름으로 구분되는 여러개의 preferences 파일이 필요할 때 사용한다, 첫번째 인자로 파일의

이름을 지정한다.

 

getPreferences()

 

특정 액티비티에서 사용하고자 하는 preferences 파일이 하나만 필요할 때 사용한다. 액티비티에서

사용될 유일한 preferences 파일이기 때문에, 첫번째 인자로 파일의 이름을 넘겨주지 않아도 된다.

 

SharedPrefer를 사용해 데이터를 쓰기 위해서는

 

1. SharedPreferences.Editor 객체를 얻기 위해, edit() 메소드를 호출한다.

 

2. putBoolean() 이나 pubString()과 같은 메서드를 이용해서 values를 추가한다.

 

3. commit() 메소드를 통해서 새로운 values를 추가를 완료한다.


 

SharedPrefer를 사용해 데이터를 읽기 위해서는

 

getBoolean()이나 getStrign()과 같은 SharedPrefereneces와 같은 메소드를 사용한다.

 

내부 저장소(Internal Storage) 사용하기

 

사용자는 스마트폰 내부 저장소에 파일을 저장할 수 있다. 기본적으로, 내부 저장소에 저장된 파일들은 특정 어플리케이션에서만 사용할 수 있고, 어플리케이션은 다른 어플리케이션의 내부 저장소에 접근할 수 있다. 유저가 어플리케이션을 제거했을 때, 내부 저장소에 존재했던 모든 파일들은 제거된다.

 

내부저장소에 파일을 생성하고 작성하기 위해서는

 

1) 파일 이름과 접근 모드를 파라미터로 해서 openFileOutput() 메소드를 호출한다.

이 메소드의 결과값은 FileOutputStream 객체가 된다.

 

2) write() 메소드를 이용해서 파일에 데이터를 작성한다.

 

3) close() 메소드를 이용해서 스트림을 닫는다.

 

String FILENAME = "hello_file";
String string = "hello world!";

 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

 

MODE_PRIVATE는 그 파일이 특정 어플리케이션에서만 사용 가능하다는 것을 뜻한다. 다른 모드로는 MODE_APPEND, MODE_WORLD_READABLE 그리고 MODE_WORLD_WRITEABLE가 있다.

 

내부 저장소에서 파일을 읽기 위해서는

 

1) openFileInput() 메소드를 호출하고 파라미터로 읽고자 하는 파일의 이름을 전달한다.

 

2) read() 메소드를 통해 파일로부터 바이트 정보를 읽어들인다.

 

3) close() 메소드를 호출해서 스트림을 닫는다.

 

내부 저장소(Internal Storage)에 캐시(Cache) 파일 저장하기

 

데이터를 영구적으로 저장하는 것이 아닌 일부 데이터를 일시적으로 저장하길 원한다면 getCacheDir()를 사용해야 한다. getCacheDir()는 일시적으로 저장되는 캐시 파일들이 저장되는 내부 디렉토리를 오픈할 때 사용해야 한다.

 

스마트폰의 내부 저장 공간이 부족할 때, 안드로이드에서는 공간을 확보하기 위해 캐시파일을 삭제하게 된다. 하지만, 시스템이 캐시 파일을 이와같이 처리하도록 두면 안된다. 개발자는 캐시 파일의 크기가 합리적으로 유지되도록 어플리케이션을 설계해야 한다. 캐시 디렉토리 역시 어플리케이션이 삭제될 때, 같이 제거된다.

 

내부 저장소(Internal Storage)와 관련된 다른 유용한 메소드들

 

getFilesDir()

 

내부 파일들이 저장되는 파일시스템 디렉토리의 절대 경로를 얻는다.

 

getDir()

 

내부 저장 공간에서 디렉토리를 생성하거나, 아니면 기존 디렉터리를 오픈한다.

 

deleteFile()

 

내부 저장 공간에서 저장된 파일을 삭제한다.

 

fileList()

 

어플리케이션에 의해 현재 저장된 파일의 배열을 반환한다.

 

감사합니다 ^_^