[Android] Sharedpreferences 사용하기 [ 간단한 DB, 안드로이드 내부 데이터베이스 사용 ]

[ Sharedpreferences의 필요성 ]

 

Android 개발을 진행하다 보면 데이터 베이스 사용이 필요해진다.

하지만 관리해야 할 데이터의 양이 적어서 간단한 데이터 베이스만을 구축이 필요할 때가 있다.

다른 서버나 외부 데이터 베이스를 이용하는 방법이 있지만, 적은 약의 데이터만을 관리하거나 저장하기에는

부담스러울 때가 있다. 이런 경우에는 안드로이드 내부에서 기본적으로 제공해주는 Sharedpreferences 를 사용해야 한다.

간단한 일정 관리 앱이나 다른 사람과의 상호작용이 필요없거나 그다지 중요하지 않은 데이터들은 

Sharedpreferences 를 통해서 앱 내부에 저장되게 하는 것이 좋다.

Sharedpreferences 를 통해서 저장을 하면 앱 내부 폴더에 저장되므로 앱 삭제시 데이터들이 삭제된다.

 

[개별 공부]

 

안드로이드 인강을 듣다가 이 부분에 대해서 공부한적이 있었다.

외부 데이터 베이스를 사용하면 되는데 굳이 이러한 기능이 필요한 이유가 없다며 읽고 넘겼던 기억이있다.

하지만 간단한 설정 값이나 문자열과 같은 적은 데이터를 저장하기에 매우 편리하고 적합하다는 것을 깨달았다.

Sharedpreferences의 가장 큰 특징은 key-value 방식인 것이다.

Intent를 통해서 다른 액티비티와 상호작용 하는 것처럼 key값과 그에 맞는 value를 지정해주어서 

간편하게 접근하고 사용할 수 있었다.

 

[사용 방법]

 

아래는 Sharedpreferences의 예제를 연습하면서 작성한 코드이다.

button_1을 클릭하면 저장 된 데이터를 불러오고,

button_2를 클릭하면 새로운 값을 저장하고,

button_3를 클릭하면 값의 일부를 삭제,

button_4를 클릭하면 저장 된 값을 모두 삭제하는 코드를 작성하면서 연습을 하였다.

 

class Sharedpreference : AppCompatActivity() {
    @SuppressLint("CommitPrefEdits")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sharedpreference)

        button_1.setOnClickListener {
            //값을 불러오는 방법
            val sharedpreference = getSharedPreferences("sp1", Context.MODE_PRIVATE)
            val value1 = sharedpreference.getString("hello", "데이터 없음1")
            val value2 = sharedpreference.getString("goodbye", "데이터 없음2")
            Log.d("key-value", "Value1:" + value1)
            Log.d("key-value", "Value2:" + value2)

            //앱을 새로 켜도 데이터가 남아있음
        }

        //값 저장하기
        button_2.setOnClickListener {
            //sharedpreference에 저장하는 방법
            val sharedpreference = getSharedPreferences("sp1", Context.MODE_PRIVATE)
            val editor: SharedPreferences.Editor = sharedpreference.edit()
            editor.putString("hello", "안녕하세요")
            editor.putString("goodbye", "잘가세요")
            editor.apply() //꼭 해줘야함
            // 같은 키, 밸류에도 다른 sharedpreference 이름이면 다른 값임
        }
        //값 일부 삭제하기
        button_3.setOnClickListener {
            val sharedpreference = getSharedPreferences("sp1", Context.MODE_PRIVATE)
            //값 불러오기
            val editor = sharedpreference.edit()
            editor.remove("hello")
            editor.apply()

        }
        //값 전체 삭제하기
        button_4.setOnClickListener {
            val sharedpreference = getSharedPreferences("sp1", Context.MODE_PRIVATE)
            //값 불러오기
            val editor = sharedpreference.edit()
            editor.clear()
            editor.apply()
        }
    }
}

 

값을 저장하는 코드에서 

Sharedpreferences 객체를 생성하고 Context.MODE_PRIVATE를 주었다.

Sharedpreferences를 관리하는 editor 객체를 생성하여  apply() 해주었다.

 

 

//sharedpreference에 저장하는 방법
val sharedpreference = getSharedPreferences("sp1", Context.MODE_PRIVATE)
val editor: SharedPreferences.Editor = sharedpreference.edit()
editor.apply() //꼭 해줘야함

여기서 중요한 점은 2가지가 있다.

1 . editor를 사용하면 반드시 apply()를 적용시켜주어야 한다.

2. Sharedpreferences를 사용할 때 적용할 속성을 알아야 한다.

 

[Sharedpreferences의 속성들]

 

// Mode
 // -MODE_PRIVATE : 생성한 앱에서만 사용 가능
 // -MODE_WORLD_READABLE : 다른 앱에서 가능, 읽기
 // -MODE_WORLD_WRITEABLE : 다른 앱에서 가능 , 쓰기 , 기록 가능
 // - MODE_MULTI_PROCESS: 이미 호출되어 사용중인지 체크
 // - MODE_APPEND : 기존 preference에 신규로 추가

 

사용 가능한 속성은 위와 같으며, 가장 많이 사용하는 속성이 MODE_PRIVATE이다.

개발하는 앱에 따라서 적절한 속성을 다르게 적용시켜 주어야 한다.

 

매우 간단하고 유용한 방법을 배우게 되었다..!