Diordna
cashwalk
Published in
6 min readJul 20, 2018

--

SharedPreferences를 ‘조금’ 더 편리하게

SharedPreferences?

SharedPreferences는 키-값 쌍을 xml의 형식으로 간단히 저장하고 불러올 수 있게 해줍니다.

앱이 완전히 종료되어도 앱이 삭제되지만 않는다면 데이터가 남아있다는 장점이 있습니다.

위의 장점들 덕에 Android를 개발해 보신 분이라면 많이 사용할것이라고 생각됩니다.

처음 들어보는 분이라면 아래의 개발자문서 링크를 참고해주세요.

https://developer.android.com/guide/topics/data/data-storage#pref

불편함

SharedPreferences를 자주 사용했었고 사용하다보니 이것저것 불편한점들이 생기기 시작했습니다.

Class에서 호출, 사용할 때 마다 getSharedPreferences()를 통하여 인스턴스를 불러와줘야 합니다.

당연히 해야만 하는 작업이지만 SharedPreferences가 사용되는 빈도 수에 비례하여 귀찮음도 증가합니다.

이름이 너무 길어요..

SharedPre…f.er…. 이름도 너무 기네요

값을 입력하는 과정이 더 귀찮습니다.

값을 불러오는 방법이야 그렇다 치고 입력하려면 불러온 SharedPreferences에서 Editor를 또 선언해 주어야 합니다.

위의 문제점?들은 SharedPreferences를 관리하는 Class를 하나 생성하면 간단히 해결되는 문제들입니다.

하지만, 또 다른 프로젝트에 가면 분명 SharedPreferences를 또 사용할 것이고 관리 Class를 또 만들어주어야 했습니다.

물론 지금도 편하게 사용할 수 있지만 그것마저 귀찮아진 저를 위해 ‘아주 조금은 편리해진’ 라이브러리를 개발해 보고 싶었고

첫 라이브러리를 만들어보게 된 계기가 되었습니다.

SimpleSharedPreferences

SimpleSharedPreferences는 이름 그대로 SharedPreferences를 좀 더 ‘Simple’ 하게 사용 하고자 하는 의지가 담겨있는 SharedPreferences Wrapper 라이브러리입니다.

줄여서 SSP !!

(라이브러리 Github주소는 글 하단에 표기해두었습니다.)

SSP 사용법 (초기화)

  1. SSP는 jitpack에 배포되어있습니다. project 단위의 gradle에 jitpack 저장소를 추가해주세요.
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}

2. 앱단위 gradle에는 SSP의 github 저장소를 추가해주세요. 현재 1.1 버전까지 릴리즈 되었습니다.

dependencies {
implementation 'com.github.YoonKyoungTae:SimpleSharedPreferences:1.1'
}

3. 안타깝게도 기존 SharedPreferences와는 다르게 초기화를 한번 진행해야합니다. SSP를 사용하기 전에 SSP.init()으로 초기화를 진행해주세요.

public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SSP.init(this);
}
}

여기까지 진행했다면 기본적인 세팅은 끝입니다!

SharedPreferences 와 SSP의 차이점

여러가지 사용방법이 있지만 구글 문서의 방법중 하나로 표기하여 비교하겠습니다.

가져오기

SharedPreferences sp = getSharedPreferences("PREFS_NAME", 0);
boolean isTrue = sp.getBoolean("myKey", false);

우리는 값을 입력할때 흔히 위와 같이 사용합니다. 이 과정을

boolean isTrue = SSP.getBoolean("myKey", false);

위와 같이 한줄로 줄여 사용할 수 있게 됩니다.

저장하기

SharedPreferences sp = getSharedPreferences("PREFS_NAME", 0);
SharedPreferences.Editor spEditor = sp.edit();
spEditor.putBoolean("myKey", false).apply();spEditor.putInt("myKey1", 123)
.putString("myKey2", "Hello")
.putBoolean("myKey3", false)
.apply();

값을 출력할 때는 Editor를 선언할 때 마다 번거로웠습니다. 위와같은 방법을

SSP.openEdit()
.putInt("myKey1", 123)
.putString("myKey2", "Hello")
.putBoolean("myKey3", false)
.apply();

바로 SSP에서 openEdit()을하고 값을 입력해주면 끝입니다.

SSP.openEdit()
.put("myKey1", 123)
.put("myKey2", "Hello")
.put("myKey3", false)
.apply();

또는 put() 메소드 하나로도 처리 가능합니다.

하지만!

put() 방법은 숫자 0이 들어갔을 때 int, float, double형 구분이 어렵기 때문에 사용에 주의가 필요합니다.

SSP를 사용함으로 더이상 SharedPreferences선언과 번거로운 Editor선언을 해주지 않아도 되고 입력과 출력 코드를 사용하는 방법도 가벼워지게 되었습니다.

또한 관리 Class를 매 프로젝트마다 생성해주는 번거로움도 라이브러리로 추가하여 사라지게 되었고여러 프로젝트에서 동일한 규칙으로 SharedPreferences를 사용할 수 있게 되었습니다.

앞으로..

실제 신규 프로젝트 코드에 점진적으로 도입을 해보고 있습니다.

물론 SSP에는 아직 부족한 기능이 많습니다. 저장소의 이름을 지정 할 수도 있어야하고, Preference의 Mode 기능 등 추가해야 할 SharedPreferences의 기능들이 있습니다.

추가 기능들은 점진적으로 개선하며 추가할 예정이며 SharedPreferences가 가진 옵션들을 모두 사용 할 수 있게 개발해 나아갈 예정입니다.

SSP의 Github 저장소 주소입니다.

https://github.com/YoonKyoungTae/SimpleSharedPreferences

처음 만들어본 라이브러리라 부족한 점이 많을 것 같습니다.

문제가 발생하거나 개선, 추가 되었으면 할 부분 있으시다면 언제든 github에 Issue/Pull Request 를 남겨주시면 언제든 반영하겠습니다.

--

--