안드로이드 With Java #25 Shared Preferences

Jake Seo·2020년 8월 18일
1

안드로이드 With Java

목록 보기
25/31

안드로이드 With Java #25 Shared Preference

Shared Preferences 개념

앱을 껐다 켰을 때도 이전의 상태가 복원하고 싶은 경우 데이터베이스에 저장을 해야 가능한데, 간단하게 데이터베이스를 사용할 수 있도록 만들어주는 것이 Shared Preferences임.

  • 간단한 데이터를 저장하기 용이
    • 데이터를 Key-Value 형식으로 저장
  • 일반적으로 초기 설정값 등을 저장하는데 사용
  • data/data/PackageName/shared_prefs/이름 경로에 저장

Shared Preferences에 저장 가능한 데이터 타입

  • Boolean, Integer, Float, Long, String을 저장 가능
  • GSON 라이브러리를 사용하면 객체도 저장 가능

Shared Preferences 모드 종류

  • MODE_PRIVATE : 해당 app 내에서만 사용 가능
  • MODE_WORLD_READABLE : 다른 app에서 읽기가 가능
  • MODE_WORLD_WRITABLE : 다른 app에서 쓰기가 가능

Shared Preferences 값 추가 불러오기 삭제 실습

Activity에서 Shared Preferences 가져오기

위와 같이 getSharedPreferences()라는 메소드를 통해 가져올 수 있다. 단, SharedPreferences의 이름과 어떤 MODE로 가져올 것인지를 인자로 잘 주어야 한다.

Shared Preferences에 값 저장하기

이전에 생성했던 sharedPreferences로 부터 Editor를 가져와야 하는데, sharedPreferences.edit() 메소드로 Editor를 가져올 수 있다. Editor의 타입은 SharedPreferences.Editor이다.

그리고 가져온 Editorput...()메소드를 수행하여 값을 넣을 수 있다. 그리고 값을 다 넣은 뒤에는 반드시 commit()을 해주어야 한다.

Shared Preferences에서 값 불러오기

SharedPreferences에 값을 넣을 때는 Editorput...() 메소드를 이용한 반면에, SharedPreferences에서 값을 가져올 때는 SharedPreferences 인스턴스에서 get...() 메소드를 이용하여 가능하다.

getString() 메소드의 두번째 인자는 실패 시에 가져올 문자열이다.

결과 확인

Log.d()로 값이 잘 들어왔는지 확인해보자

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

실패 시에 결과 확인

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

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

Shared Preferences에서 값 삭제해보기

위와 같이 remove() 메소드 또는 clear() 메소드로 값 삭제가 가능한데, 값 하나를 삭제하고 싶을 때는 remove() 메소드를 쓰면 좋고, 전체를 삭제하고 싶을 때는 clear() 메소드를 쓰면 좋다.

Editor를 사용한 뒤에는 언제나 commit()을 해야 반영이 된다.

삭제 후에 결과 확인

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

GSON을 사용하여 Shared Preferences에 객체 넣어보기

GSON 라이브러리 의존성 추가하기

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

  1. File > Project Structure 항목에 간다.
  2. Project Structure에서 Dependencies 항목을 클릭한다.
  3. Dependencies 항목 위의 + 버튼을 클릭하고, gson 을 검색한다.
  4. OK 버튼을 누르면 의존성 목록에 gson 이 생긴다.
  5. OK 버튼을 누르면 자동으로 프로젝트에 Sync 된다.

객체로 사용할 Person Class 만들어보기

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

Gson을 이용해 객체를 JSON String으로 바꿔보기

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

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

Key-Value 형태의 JSON으로 잘 변형되었다.

JSON String으로 바뀐 객체를 Shared Preferences에 저장하기

JSON String도 결국엔 문자열이기 때문에 저장하는 방법은 이전에 문자열을 저장하던 방법과 동일하다.

commit() 메소드를 해주는 것을 잊지말자.

Shared Preferences에서 JSON String 받아서 객체로 변환하기

객체로 변환할 때도 Gson을 이용한다.

Gson에 내장되어 있는 fromJson() 메소드를 사용하면, JSON String을 특정 클래스로 변환할 수 있다.

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

Log.d로 결과 확인하기

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

잘 불러와진 것을 볼 수 있다.

Shared Preferences의 활용

문자열, 정수, 객체, 불리언 타입 등 많은 자료를 저장해놓고 쓸 수 있다.

앱이 껐다 켜져도 유지되어야 할 데이터들을 저장해보자.

profile
풀스택 웹개발자로 일하고 있는 Jake Seo입니다. 주로 Jake Seo라는 닉네임을 많이 씁니다. 프론트엔드: Javascript, React 백엔드: Spring Framework에 관심이 있습니다.

0개의 댓글