본문 바로가기

안드로이드 스튜디오

#8 데이터값을 저장하는 SharedPreferences

안드로이드 스튜디오

- SharedPreferences -



흔히 게임 어플들을 보면 설정창이 꼭 있다.

설정창에는 푸시(On/Off), 진동(On/Off), 그래픽품질 등 사용자가 지정할 수 있는 여러 데이터값들이 있는데

우리가 설정을 해놓고 어플을 껏다가 다시 켜도 설정해놓은 값이 그대로 있는 것을 볼 수가 있다.

이러한 기능을 해주는 함수가 바로 SharedPreferences 이다.


이번 포스팅에는 SharedPreferences 기능을 간단히 EditText로 알아볼 것이다.


우리가 해볼 실험은 EditText에 사용자가 안드로이드 키보드로 텍스트를 입력하고 앱을 끄고 다시 킬 때

그 텍스트가 그대로 유지되는 모습을 실험해 볼 것이다.


먼저 EditText를 activity_main.xml 파일에서 생성해준 다음 아이디값까지 부여해준다.

그리고 activity_main.xml 파일의 전체 레이아웃을 LinearLayout으로 변경해준다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<EditText
android:id="@+id/et_save"
android:layout_width="100dp"
android:layout_height="wrap_content" />

</LinearLayout>


그 다음 MainActivity.java 파일로 가서 class MainActivity와 @Override 사이에

EditText 데이터를 선언하고 String형 문자열도 하나 생성해준다.

public class MainActivity extends AppCompatActivity {

EditText et_save;
String shared = "file";

@Override


이제 onCreate 메소드 안과 밖에 다음과 같이 적어줄 것이다.

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

et_save = (EditText)findViewById(R.id.et_save);

SharedPreferences sharedPreferences = getSharedPreferences(shared, 0);
String value = sharedPreferences.getString("key","");
et_save.setText(value);

}

@Override
protected void onDestroy() {
super.onDestroy();

SharedPreferences sharedPreferences = getSharedPreferences(shared, 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
String value = et_save.getText().toString();
editor.putString("key", value);
editor.commit();
}

하나씩 설명하자면 SharedPreferences shared ~ = getSharedPreferences() 이 부분이 바로

우리가 이번시간에 배울 SharedPreferences를 선언한 부분이다.

getSharedPreferences에는 2개의 매개변수 String형, int 형이 들어가는데

String 형의 데이터의 내용을 검색하여 유지하는 기능이다. (쉽게 말해 우리가 위에 넣은 shared 매개변수는

sharedPreferences를 구분하기 위한 Name 값)


그 다음줄은 String형의 value 라는 변수에 sharedPreferences.getString("key", ""); 라고 되어있는데

이는 key라는 특정한 별칭으로 된 sharedPreferences에 저장된 값을 value변수에 넣는다! 라는 의미이다.

< getString()엔 (String key, String defValue) 매개변수가 들어가는데 2번째 매개변수는 주로 "' 이렇게 빈 내용이다. />


setText(value); 부분은

그 value값을 이전에 생성해둔 EditText인 et_save.setText(value); 로 텍스트형태로 넣어준다! 는 의미다.


그리고 onDestroy() 매소드가 나오는데 (Ctrl + O 로 찾아서 쉽게 메소드를 추가할 수 있음)

이 메소드는 앱을 나가게 될 때 실행이 되는 메소드이다.

onDestroy 메소드 내에서도 마찬가지로 SharedPreferences 를 선언해 준 다음

SharedPreferences Editor라고 실제로 어떤 데이터를 저장할 때 Editor라는 것을 불러와 저장시킨다고 한다.

그 Editor를 우리가 앞에 선언한 SharedPreferences와 연결해준다는 의미이다.

그리고 String value 변수에 = et_save.getText().toString(); 이는

et_save에 현재 써있는 text를 String 형태로 가져와 value 변수에 넣는다는 의미이다.

그리고 중요한 editor.putString이라고 해서 매개변수가 (String "key, String value); 이렇게 들어가있는데

editor에 String형인value(EditText에 적은 텍스트값)을 "key"라는 별명으로 저장한다는 의미이다.

여기서 이 별명 "key"의 역할은 일종의 아이디와 비슷한 역할인데 위 구문에서

sharedPreferences.getString("key", ""); 이렇게 별명으로 저장된 데이터를 가져올 때 쓰인다.

마지막으로 editor.commit(); 은 모든 작업을 완료해라, 즉 저장을 완료해라! 라는 의미이다.


이렇게 작성한 뒤 빌드를 하고 EditText에 텍스트를 입력하고 앱을 종료 후 다시 켜보면

입력한 텍스트가 그대로 남아있는 모습을 볼 수 있을 것이다.



구문 자체는 그리 복잡한 구문은 없었지만 처음보는 메소드들이 대거 등장해서

그 메소드들의 역할을 공부하는데 나름 에너지를 소모했다.