안드로이드 개발을 하면서 간단한 값들을 앱안에 저장할 때가 있는데요.

예를 들면, 앱의 글자 크기설정, 알람 온오프 같은 값입니다.

그런데, 이럴때마다 DB를 사용하는 것은 너무나 무거운 일인데요.

SharedPreference를 사용하면 좀더 가볍고, 쉽게 해결할 수 있습니다.



1. SharedPreference 는?


SharedPreference는 비교작 작은 크기의 키-밸류값을 읽고 쓸수 있도록 Android Framework에서 제공해주는 기능입니다.

위에서 애기한것처럼, 주로 설정값을 저장 하는데 많이 사용 하구요.

경우에 따라서 private하게 사용하거나, share될수 있도록 할 수 있습니다.

그럼 한번 실제로 만들어보면서 알아보겠습니다.



2. Sington 패턴사용한 초기화


실제 앱에서 작업할때는 manager나 Util클래스를 만들어서 사용을 많이하는데요.

이 글에서도 한번 Manager를 만들어서 사용해보겠습니다.


먼저 싱글턴 패턴을 사용해서, 객체를 얻을 수 있도록 getInstance() 메소드를 만듭니다.

참고로, 싱글턴 패턴에 대한 글은 아래 링크에서 볼 수 있어요~

>>> Singleton 패턴에 대해서 <<<




3. 생성자 만들기


생성자에서 객체를 생성하면서 몇가지 해야할 일들이 있는데요.


먼저, SharedPreference를 사용하기 위해서 필요한 Context를 인자로 받아오구요.


다음으로,  getSharedPreferences()메소드에 인자로 파일이름과 SharedPreference의 Mode를 넣어주어서 SharedPreference파일을 생성합니다.

참고로, 파일이름을 정하지 않고, 하나의 파일로만 사용하려면, getPreferences() 메소드를 이용하면, 파일이름 지정없이 SharedPreference를 핸들링할수 있습니다.



SharedPreferences를 얻어오면서 private하게할지 share할지를 두번째 인자를 넘겨주면서, 정할 수 있는데요.

Context.MODE_PRIVATE은 private해서 다른앱에서 접근하지 못하도록하는 것이구요,

MODE_WORLD_READABLE 이나, MODE_WORLD_WRITEABL 로 설정하면,

외부 앱에서도 파일의 위치만 알면 접근할 수 있게 됩니다.

(하지만 그럴일이 흔하지는 않겠지요.)


이제, 위에서 얻은 SharedPreference의 edit()메소드를 통해서,

SharedPreference파일에 key-vaule값을 저장할 수 있는 SharedPreferences.Editor 를 얻어오면 생성자에서 할 일은 마무리 됩니다.





4. Setter-Getter 메소드 만들기


이제 원하는 키-밸류 값을 사용할 수 있도록, 

Setter와 Getter메소드를 만들면 되는데요.


Setter메소드는 위에서 SharedPreferences를 얻어와 저장한 mSharedPrefs와 mEditor를 이용해서, 

아래와 같이 setSoundOn()이라는 메소드에 boolean값을 저장합니다.

mEditor에는 boolean, String, int, double 등등에 Hash map까지 저장할 수 있으므로, put메소드를 사용하여 저장하면 됩니다.

마지막에 commit()메소드를 사용하지 않으면 저장되지 않으므로, 주의해야합니다.


Getter메소드는 아래와 같이 저장하였던 자료형으로 값을 return하도록 해주면 되는데요,

두번째 인자로 디폴트값을 넣어주어야 합니다.




5. Activity에서 사용하기


이제 위에서 만든 SharedPrefManager를 사용해서,

Activity에서 사운드 온오프값을 한번 저장해보겠습니다.

조금 어색한 케이스겠지만, 

setSoundOn메소드를 이용해서 true 값을 저장하고,

바로 읽어서 토스트 팝업으로 띄우도록 하였습니다.


  1. 나즈나 2017.06.30 20:13

    갑자기 어디서 mEdit mEditor mSharedPrefs가 나오는지 모르겠네요.. 어디서도 정의를 안하셨는데 그것들은 어떤건가요//

    • Developer88 Developer88 2017.07.01 06:55 신고

      mSharedPrefs와 mEdit은 생성자에서 정의한 변수입니다. 생성자에서 만들어서 전역변수로 사용합니다. <3. 생성자 만들기>를 참고해 주세요~.
      (mEdit은 오탈자로 수정하였습니다~)

+ Recent posts