728x90

SharedPreferences란?

안드로이드 앱 개발을 진행하다 보면, 앱의 데이터들을 저장하여 관리해야 할 상황이 존재한다. 데이터의 양이 많거나 중요 데이터의 경우 서버나 DB에 저장해야겠지만, 간단한 설정 값이나 문자열 같은 데이터를 저장하기 위해 DB를 사용하기는 부담스럽기 때문에 SharedPreferences를 사용하는 것이 적합하다.

SharedPreferences의 특징

  • 보통 초기 설정값이나 자동 로그인 여부 등 간단한 값을 저장하기 위해 사용
  • Application에 파일 형태로 데이터를 저장한다.
  • Application이 삭제되기 전까지 저장한 데이터가 보존된다.
  • Key-value 방식

 

MODE의 종류

 

  • MODE_PRIVATE : 생성한 Application에서만 사용 가능하다.
  • MODE_WORLD_READABLE : 외부 App에서 사용 가능, But 읽기만 가능
  • MODE_WORLD_WRITEABLE : 외부 App에서 사용 가능, 읽기/쓰기 가능

대부분은 MODE_PRIVATE를 많이 사용한다.

 

사용 예시

        binding.btnSave.setOnClickListener { //데이터 저장 버튼 눌렸을 때
            val sharedPreferences = getSharedPreferences("파일이름", Context.MODE_PRIVATE)
            val editor = sharedPreferences.edit()
            editor.putString("key",binding.editText.text.toString()) //"key" ,"value" 형태 값을 가져올 때 "key" 가 맞아야함
            editor.apply() //or commit() // apply() or commit()을 해줘야 적용됨
            Toast.makeText(this, "데이터 저장 완료", Toast.LENGTH_SHORT).show()
        }
        val sharedPreferences = getSharedPreferences("EditText", Context.MODE_PRIVATE)
        binding.editText.setText(sharedPreferences.getString("key", "디폴트 값"))
        binding.btnDelete.setOnClickListener {//데이터 삭제 버튼 눌렸을 때
            val sharedPreferences = getSharedPreferences("EditText", Context.MODE_PRIVATE)
            val editor = sharedPreferences.edit()
            editor.clear()//데이터 삭제
            editor.apply()//적용
            Toast.makeText(this, "데이터 삭제", Toast.LENGTH_SHORT).show()
            binding.editText.setText("")
        }

    }

    override fun onResume() {
        getSharedPreferences("파일이름", Context.MODE_PRIVATE).run {
            binding.editText.setText(getString("key", "디폴트 값"))
        }
        super.onResume()
    }

사용 예시

데이터를 저장할 때, commit() 보다는 apply() 가 권장된다.

(commit()은 동기 처리라서 상황에 따라 안좋은 선택이 될수 있음)

 

람다식으로도 사용 가능하다. (람다식 edit{} 은 디폴트로 apply() 가 적용됨)

        binding.btnSave.setOnClickListener {
            getSharedPreferences("파일이름", Context.MODE_PRIVATE).edit {
                //putString("key","value")
                putString("EditText", binding.editText.text.toString())
            }
            Toast.makeText(this, "데이터 저장", Toast.LENGTH_SHORT).show()
        }
        binding.btnDelete.setOnClickListener {
            getSharedPreferences("파일이름", Context.MODE_PRIVATE).edit {
                clear()
            }
            binding.editText.setText("")
            Toast.makeText(this, "데이터 삭제", Toast.LENGTH_SHORT).show()
        }

    }

    override fun onResume() {
        getSharedPreferences("파일이름", Context.MODE_PRIVATE).run {
            binding.editText.setText(getString("EditText", "디폴트 값"))
        }
        super.onResume()
    }

+ Recent posts