POST

[안드로이드]코틀린 SharedPreFerences를 사용해 데이터 저장하기

SharedPreferences는 인텐트에 값을 전달하듯이 데이터를 키, 값 형태로 저장이 가능합니다. 데이터는 xml 형식으로 된 파일로 저장되며 앱이 종료되도 남아 있습니다.

 

SharedPreferences 사용하기

Sharedpreferences를 사용하기 위해서는 값을 저장 할때와 값을 읽어올 때 아래와 같은 과정이 필요합니다.

값을 저장할 경우

 1. SharedPreferences 생성

 2. Editor 꺼내기

 3. putInt(), putString() 메서드로 저장하기

 4. apply()로 파일에 반영

 

값을 읽어올 경우

 1. SharedPreferences 생성

 2. getInt(), getString() 메서드로 값 읽어 오기

   -값을 읽어올때는 apply()가 필요하지 않다.

 

getSharedPreferences()

 getSharedPreferences()는 Context를 가지고 있는 모든 컴포넌트에서 접근과 호출이 가능함. getSharedPreferences(이름, 모드)를 액티비티에서 호추라면 SharedPreferences가 반환 작성법은 아래와 같습니다.

val shared = getSharedPreferences("이름",Context.MODE_PRIVATE)

첫번째 파라미터에는 입력될 데이터가 저장되는 파일명에 해당 되고, 두번째 파라미터는 파일 접근 권한을 설정합니다. 3가지의 권한이 있지만 보안상의 이유로 지금은 MODE_PRIVATE만 사용됩니다.

 

getPreferences()

개별 액티비티에서 사용하거나 액티비티가 하나밖에 없는 앱이라면 getPreferences()를 호출해서 사용할 수 있습니다.

호출하는 액티비티의 이름으로 저장 파일이 생성됩니다.

var preference - getPreferences(Context.MODE_PRIVATE)

 

Editor로 데이터를 저장하고 불러오기

SharedPreferences로 데이터를 저장하기 위해서는 Editor 인터페이스를 사용해야 합니다.

사용 방법은 edit()메서드를 호출해서 사용할 수 있습니다.

val shared = getSharedPreferences("이름",Context.MODE_PRIVATE)

val editor = shared.edit()

 

데이터 저장하기

데이터를 저장할 때는 입력될 값의 타입에 맞는 Editor의 메서드를 사용해서 저장할 수 있는데, 마지막에 apply() 메서드를 호출해야지만 실제 파일에 반영됩니다.

val shared = getSharedPreferences("이름", Contex.MOED_PRIVATE)

val editor = shared.edit()

editor.putString("키","값")

editor.apply()

 

메서드명의 prefix인 put 다음에 나오는 문자가 입력값의 '타입'입니다.

ex)

putFloat(key: String, value: Float)

putLong(key: String, value: Long)

putInt(key: String, value: Int)

putString(key: String, value: String)

putBoolean(key: String, value: Boolean)

putStringSet(key: String, value: set<String>)

 

데이터 불러오기

데이터를 불러 올때는 데이터를 저장하는 것과는 다르게 Editor를 사용하지 않고 SharedPreferences의 메서드를 직접 호출해서 데이터를 불러옵니다. 만약 해당 키에 데이터가 없으면 defaultValue를 지정해서 해당 값을 기본으로 반환 함

val shared = getSharedPreferences("이름",Contex.MODE_PRIVSATE)

shared.getString("키", "기본값")

 

ex)

getFloat(key: String, defaultValue: Float)

getLong(key: String, defaultValue: Long)

getInt(key: String, defaultValue: Int)

getString(key: String, defaultValue: String)

getBoolean(key: String, defaultValue: Boolean)

getStringSet(key: String, defaultValue: set<String>)

 

Editor의 메서드

이 외에 Eidtor를 사용한 메서드가 더 있습니다.

remove(String key): 해당 키의 데이터를 삭제합니다.

clear(): 모든 데이터를 삭제합니다.

apply(): 변경한 업데이트를 파일에 비동기적으로 저장합니다.

commit(): 변경한 업데이트를 파일에 동기적으로 저장합니다. 동기 작업이므로 UI스레드에서 호출하는 것을 피해야 합니다.

 

주의 할 점은 삭제후에도 apply()를 호출 해주어야 합니다.

commit()도 apply()처럼 변경된 사항을 저장하는 메서드 이지만 commit()은 메인 스레드(UI 스레드)를 사용해서 짧게 화면이 멈출 수 있기에 특별한 경우가 아니라면 apply()메서두룰 사용하는것이 좋습니다.