안드로이드 애플리케이션 개발에서는 데이터 저장이 중요한 작업 중 하나입니다. 사용자 설정, 간단한 데이터 또는 로그인 상태를 저장하기 위해 흔히 사용되는 방법이 SharedPreferences입니다. 이번 포스팅에서는 SharedPreferences를 사용하여 데이터를 저장하고 불러오는 방법에 대해 알아보겠습니다. Kotlin을 사용한 코드 예제도 포함되어 있으니 실습해보세요!
SharedPreferences란?
SharedPreferences는 키-값(Key-Value) 쌍 형태로 간단한 데이터를 저장할 수 있는 안드로이드의 API입니다. 이를 이용하면 애플리케이션이 종료되더라도 데이터가 유지되므로 설정 정보, 사용자 이름과 같은 간단한 정보들을 저장하기에 적합합니다.
SharedPreferences는 내부적으로 XML 파일에 데이터를 저장합니다. 내부적으로 보안에 강하지 않으므로 민감한 데이터는 별도의 암호화 과정을 거치는 것이 좋습니다.
SharedPreferences 사용하기
SharedPreferences를 사용하는 주요 과정은 다음과 같습니다:
- SharedPreferences 객체를 얻는다.
- 데이터 저장 시,
Editor
객체를 통해 데이터를 저장한다. - 데이터 읽기 시,
get
메소드를 이용해 저장된 데이터를 읽는다.
이제 단계별로 자세히 살펴보겠습니다.
SharedPreferences 객체 얻기
SharedPreferences 객체는 getSharedPreferences()
메소드를 이용해 얻을 수 있습니다. 이 메소드는 앱의 Context
에서 호출하며, 이름과 모드를 지정할 수 있습니다.
MODE_PRIVATE
: 앱 내부에서만 사용 가능하도록 설정 (기본 값)
다음은 SharedPreferences 객체를 얻는 방법의 예제입니다:
val sharedPreferences = getSharedPreferences("my_preferences", Context.MODE_PRIVATE)
여기서 "my_preferences"
는 SharedPreferences 파일의 이름입니다.
데이터 저장하기
데이터를 저장하기 위해서는 SharedPreferences.Editor
객체가 필요합니다. 데이터를 수정하려면 edit()
메소드를 호출한 후 데이터를 추가하고 apply()
또는 commit()
을 호출해야 합니다.
apply()
: 비동기적으로 저장 (일반적으로 더 빠르고 권장)commit()
: 동기적으로 저장하고, 성공 여부를 boolean 값으로 반환
아래는 Editor
객체를 사용하여 데이터를 저장하는 코드 예제입니다:
val editor = sharedPreferences.edit()
editor.putString("username", "kang_hyun")
editor.putInt("user_age", 10)
editor.apply() // 비동기 저장
위의 코드에서 putString()
과 putInt()
메소드를 사용하여 키-값 형태로 데이터를 저장하고 있습니다. username
과 user_age
를 키로 사용하여 데이터를 저장합니다.
데이터 읽기
SharedPreferences에 저장된 데이터를 읽기 위해서는 get
메소드를 사용합니다. getString()
, getInt()
, getBoolean()
등 다양한 메소드들이 제공되며, 데이터를 읽는 과정은 키를 사용하여 저장된 값을 불러오는 방식입니다.
다음은 저장된 데이터를 읽는 코드 예제입니다:
val username = sharedPreferences.getString("username", "default_value")
val userAge = sharedPreferences.getInt("user_age", 0)
println("Username: $username")
println("User Age: $userAge")
위의 코드에서 getString()
과 getInt()
메소드를 사용하여 저장된 데이터를 불러오고 있습니다. 만약 해당 키에 대한 값이 저장되지 않은 경우, 두 번째 매개변수로 기본 값을 지정하여 사용할 수 있습니다.
SharedPreferences의 사용 예제
안드로이드에서 SharedPreferences를 사용할 때의 예제를 보겠습니다. 이번 예제에서는 버튼 클릭 시 사용자의 이름과 나이를 저장하고, 이를 다시 화면에 표시하는 간단한 애플리케이션을 만들어보겠습니다.
UI 레이아웃 작성 (activity_main.xml)
먼저 UI를 정의하는 XML 파일입니다. 사용자 이름과 나이를 입력하고 저장하고 이를 다시 표시하는 버튼이 포함됩니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/editTextName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter your name" />
<EditText
android:id="@+id/editTextAge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:hint="Enter your age" />
<Button
android:id="@+id/buttonSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save" />
<Button
android:id="@+id/buttonLoad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Load" />
<TextView
android:id="@+id/textViewResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="20dp" />
</LinearLayout>
Kotlin 코드 작성 (MainActivity.kt)
다음은 Kotlin으로 작성한 액티비티 코드입니다. 여기서는 사용자가 입력한 데이터를 SharedPreferences에 저장하고 이를 불러와 화면에 표시합니다.
import android.content.Context
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val sharedPreferences = getSharedPreferences("user_prefs", Context.MODE_PRIVATE)
buttonSave.setOnClickListener {
val name = editTextName.text.toString()
val age = editTextAge.text.toString().toIntOrNull() ?: 0
val editor = sharedPreferences.edit()
editor.putString("username", name)
editor.putInt("user_age", age)
editor.apply()
textViewResult.text = "Data Saved!"
}
buttonLoad.setOnClickListener {
val name = sharedPreferences.getString("username", "No Name")
val age = sharedPreferences.getInt("user_age", 0)
textViewResult.text = "Name: $name, Age: $age"
}
}
}
코드 설명
getSharedPreferences()
: SharedPreferences 객체를 가져옵니다. 여기서는 "user_prefs"라는 이름의 파일을 사용합니다.buttonSave.setOnClickListener
: 사용자가 이름과 나이를 입력한 후 "Save" 버튼을 클릭하면 데이터를 SharedPreferences에 저장합니다.buttonLoad.setOnClickListener
: "Load" 버튼을 클릭하면 SharedPreferences에 저장된 데이터를 불러와 화면에 표시합니다.
마무리
SharedPreferences는 안드로이드에서 간단한 데이터 저장에 매우 유용합니다. 이 튜토리얼에서는 사용자의 이름과 나이를 저장하고 불러오는 예제를 통해 SharedPreferences의 기본 사용 방법을 배웠습니다. 간단하지만 강력한 기능이므로, 앱을 개발할 때 적절히 활용해 보세요.
보다 복잡한 데이터나 보안이 요구되는 경우에는 데이터베이스(SQLite, Room)나 안전한 암호화 방식의 저장소를 사용하는 것이 좋습니다.
궁금한 점이나 더 알고 싶은 내용이 있다면 댓글로 남겨주세요. 다음 포스팅에서 더욱 유용한 정보로 찾아뵙겠습니다!
'Android' 카테고리의 다른 글
Android UI : RelativeLayout (0) | 2024.10.30 |
---|---|
Android UI : LinearLayout (0) | 2024.10.29 |
Android 화면 전환 멀티 스크린 구현하기 - Fragment, ViewPager2 (0) | 2024.10.27 |
Android UI 개선하기: BottomNavigationView 활용법 (0) | 2024.10.26 |
Android ToolBar로 나만의 액션바 만들기 (0) | 2024.10.24 |