안드로이드 With Java #25 Shared Preference
앱을 껐다 켰을 때도 이전의 상태가 복원하고 싶은 경우 데이터베이스에 저장을 해야 가능한데, 간단하게 데이터베이스를 사용할 수 있도록 만들어주는 것이 Shared Preferences임.
Key-Value 형식으로 저장data/data/PackageName/shared_prefs/이름 경로에 저장Boolean, Integer, Float, Long, String을 저장 가능GSON 라이브러리를 사용하면 객체도 저장 가능MODE_PRIVATE : 해당 app 내에서만 사용 가능MODE_WORLD_READABLE : 다른 app에서 읽기가 가능MODE_WORLD_WRITABLE : 다른 app에서 쓰기가 가능
위와 같이 getSharedPreferences()라는 메소드를 통해 가져올 수 있다. 단, SharedPreferences의 이름과 어떤 MODE로 가져올 것인지를 인자로 잘 주어야 한다.

이전에 생성했던 sharedPreferences로 부터 Editor를 가져와야 하는데, sharedPreferences.edit() 메소드로 Editor를 가져올 수 있다. Editor의 타입은 SharedPreferences.Editor이다.
그리고 가져온 Editor에 put...()메소드를 수행하여 값을 넣을 수 있다. 그리고 값을 다 넣은 뒤에는 반드시 commit()을 해주어야 한다.

SharedPreferences에 값을 넣을 때는 Editor의 put...() 메소드를 이용한 반면에, SharedPreferences에서 값을 가져올 때는 SharedPreferences 인스턴스에서 get...() 메소드를 이용하여 가능하다.
getString() 메소드의 두번째 인자는 실패 시에 가져올 문자열이다.
Log.d()로 값이 잘 들어왔는지 확인해보자

실패가 나오지 않고 아까 넣었던 안녕하세요 문자열이 잘 나온다.

이번엔 사전에 넣어주지 않은 Undefined Key Value라는 문자열을 넣어보았다.

실패라는 문자열이 잘 나온다.

위와 같이 remove() 메소드 또는 clear() 메소드로 값 삭제가 가능한데, 값 하나를 삭제하고 싶을 때는 remove() 메소드를 쓰면 좋고, 전체를 삭제하고 싶을 때는 clear() 메소드를 쓰면 좋다.
Editor를 사용한 뒤에는 언제나 commit()을 해야 반영이 된다.

기존에 저장된 값을 삭제한 뒤에, 위와 같이 value를 다시 불러왔다.

기존에는 app단위 build.gradle 내부의 dependencies 항목에 직접 문자열을 추가해서 의존성을 추가했는데, 이 방법 말고 다른 방법으로 추가할 수 있다.






간단하게 멤버 변수로 name과 age를 넣고, 생성자만 만들어주었다.

위와 같이 Gson 객체를 만들어서 Gson 객체의 toJson() 메소드에 Person 객체인 person을 인자로 넘겨 문자열 JSON 형태로 만들었다.

로그를 출력해보면 다음과 같이 나온다.

Key-Value 형태의 JSON으로 잘 변형되었다.
JSON String도 결국엔 문자열이기 때문에 저장하는 방법은 이전에 문자열을 저장하던 방법과 동일하다.

commit() 메소드를 해주는 것을 잊지말자.
객체로 변환할 때도 Gson을 이용한다.
Gson에 내장되어 있는 fromJson() 메소드를 사용하면, JSON String을 특정 클래스로 변환할 수 있다.

위와 같이 personJsonString이라는 곳에 JSON String을 다시 불러오고, Gson의 fromJson() 메소드를 통해 JSON String을 다시 클래스로 변환하여 retrievedPerson이라는 Person 타입의 변수에 저장하였다.

불러온 retrievedPerson 이 정상적으로 작동하는지 확인해보았다.

잘 불러와진 것을 볼 수 있다.
문자열, 정수, 객체, 불리언 타입 등 많은 자료를 저장해놓고 쓸 수 있다.
앱이 껐다 켜져도 유지되어야 할 데이터들을 저장해보자.