안드로이드와 앱/안드로이드

SharedPreferences

정혜현 2024. 8. 5. 15:11

Preference

프로그램의 설정 정보(사용자의 옵션 선택 사항 이나 프로그램의 구성 정보)를 영구적으로 저장하는 용도

간단한 정보들을 저장할 때 사용(예 : 알림설정 true/false)하며 보통 여러개를 저장한다.

XML 텍스트 파일에 키-값 세트로 저장

 

SharedPreferences 클래스

Preferences의 데이터를 관리하는 클래스

응용 프로그램 내(현 어플리케이션) 액티비티 간 공유. 한 액티비티에서 수정 시 다른 액티비티에서도 수정된 값 확인
응용 프로그램의 고유한 정보이므로 외부에서는 읽을 수 없다.

 

 

 

 

 

 

 

 

String, Boolean, Int, Long, Float  타입의 저장 및 복원

  • 한개의 파일 : getPreferences 
    액티비티 클래스에 정의된 메소드이므로 액티비티 인스턴스를 통해 접근 가능
    생성한 액티비티 전용. 같은 패키지의 다른 액티비티에서는 읽을 수 없다.
    액티비티와 동일한 이름의 XML 파일 생성
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)

 

  • 여러개의 파일 : getSharedPreferences (name, mode)
    name : 프레퍼런스 데이터를 저장할 XML 파일의 이름
    mode : 파일의 공유 모드
    MODE_PRIVATE: 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기 쓰기 가능
    MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE은 보안상 이유로 API level 17에서 deprecated됨
val sharedPref = activity?.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE)

 

저장

private fun saveData() {
        val pref = getSharedPreferences("pref",0)
        val edit = pref.edit()
        edit.putString("키", 값)
        edit.apply()
    }

 

복원

private fun loadData() {
        val pref = getSharedPreferences("pref",0)
        binding.etHello.setText(pref.getString("키",""))// default value
    }

 

 

 

 

 

 

 

 

 

그외 타입의 저장 및 복원

Json으로 변환해 String 저장 및 복원 가능. 

저장은 Gson 객체의 인스턴스 생성부분을 제외하면 위 String타입과 동일하고 복원이 좀 더 까다로워진다.

 

저장

fun saveData() {
        val pref = getSharedPreferences("pref", 0)
        val edit = pref.edit()
        val jsonString = Gson().toJson(값)
        edit.putString("키", jsonString)
        edit.apply()
    }

 

복원

fun loadData(): MutableList<Document> {
        val pref = getSharedPreferences("pref", 0)
        val jsonString = pref.getString("키", "")// default value
        
        return if (jsonString != "") {
            val type = object : TypeToken<MutableList<Document>>() {}.type
            Gson().fromJson(jsonString, type)
        } else {
            mutableListOf()
        }
    }

 

val type = object : TypeToken<MutableList<Document>>() {}.type 
익명 객체 object는 인터페이스나 추상 클래스의 메서드를 임시로 구현할 때, 특정 클래스를 상속받아 임시로 추가적인 기능이나 오버라이드를 수행할 때 사용. TypeToken을 상속받아 객체를 생성하기 위해 사용된다.

type = TypeToken.type인데 .type은 getTypeTokenTypeArgument()라는 메소드로 실제 타입정보를 반환하는 기능이다. 

오버라이드를 진행하기 위해 스코프 존재하지만 따로 오버라이드하지 않고 실제타입을 반환받기 위함으로 빈칸으로 둔다. 

Gson().fromJson(jsonString, type)

Gson 객체의 인스턴스를 생성하여 json을 반환한 타입으로 변환해준다.

 

 

 

 

 

 

 

 

 

 

 

 

 

ᖜ ‿ᖜ  도움받은 곳

https://velog.io/@dklee1619/9.21-SharedPreferences%EB%A1%9C-Json-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%80%EC%9E%A5