프로그램의 설정 정보(사용자의 기본 설정이나 옵션 선택 사항, 프로그램 구성 정보, 로그인 정보 등)를 영구적으로 저장
xml 포맷의 텍스트 파일에 키-값 쌍으로 데이터를 저장
//Gradle 플러그인 설정
plugins {
id 'com.android.application' // Android 앱을 빌드하기 위한 기본 플러그인
id 'org.jetbrains.kotlin.android' // Kotlin 언어를 사용한 Android 앱을 빌드하기 위한 플러그인
}
// Android 앱 설정
android {
namespace 'com.android.myapplication' // namespace 는 패키지 이름
compileSdk 33 // 앱이 컴파일되는 sdk 버전을 지정
// 앱의 기본 설정
defaultConfig {
applicationId "com.android.myapplication" // 앱의 고유한 식별자
minSdk 31 // 앱이 실행되는 데 필요한 최소 Android 버전을 지정
targetSdk 33 // 앱이 대상으로 하는 Android 버전을 지정
versionCode 1 // 앱의 버전 관리를 위한 정보
versionName "1.0" // 앱의 버전 관리를 위한 정보
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
// 빌드 유형 설정
// release 빌드 유형은 앱을 출시할 때 사용. 여기에서 ProGuard 및 코드 압축 관련 설정을 구성
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
// 컴파일 및 kotlin 옵션
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8 // Java 버전과의 호환성 설정
targetCompatibility JavaVersion.VERSION_1_8 // Java 버전과의 호환성 설정
}
// kotlin 컴파일러 옵션을 지정
kotlinOptions {
jvmTarget = '1.8'
}
// 뷰 바인딩 활성화. 뷰 바인딩을 사용하여 xml 레이아웃 파일과 상호 작용할 수 있다. 레이아웃 구성 요소에 쉽게 액세스하고 조작할 수 있다.
buildFeatures{
viewBinding true // viewBinding 을 true 로 설정하여 뷰 바인딩 활성화
}
}
// 의존성 관리
// implementation 키워드를 시용하여 앱에 필요한 라이브러리 의존성을 정의
dependencies {
implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}
package com.android.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.android.myapplication.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
// View Binding 을 사용하여 레이아웃과 상호 작용하기 위한 바인딩 객체 생성
// 'ActivityMainBinding' 객체를 사용하여 XML 레이아웃과 상호 작용. 이를 위해 View Binding 이 활성화되어야 한다.
private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
// 'onCreate' 함수에서 액티비티의 초기화 및 레이아웃 설정이 이루어짐.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
// "Save" 버튼 클릭 이벤트 처리
// "Save" 버튼 클릭하면 'saveData()' 메서드가 호출되어 사용자가 입력한 데이터를 SharedPreferences 에 저장
binding.btnSave.setOnClickListener{
saveData() // 데이터 저장 메서드 호출
Toast.makeText(this, "Data Saved.", Toast.LENGTH_SHORT).show()
}
// 'loadData()' 메서드는 액티비티가 시작될 때 실행. SharedPReferences 에서 저장한 데이터를 가져와서 'EditText'에 표시
loadData() // 데이터 불러오기 메서드 호출
}
// 데이터 저장 메서드
private fun saveData() {
// SharedPreferences 객체 생성
val pref = getSharedPreferences("pref",0) // "pref"라는 이름의 SharedPreferences 파일 열기
val edit = pref.edit() // 수정 모드로 열기
// SharedPreferences 에 데이터 저장
// 1번째 인자는 키, 2번째 인자는 실제 담아둘 값
edit.putString("name", binding.etHello.text.toString())
edit.apply() // 변경사항 저장 완료
}
// 데이터 불러오기 메서드
private fun loadData() {
// SharedPreferences 객체 생성
val pref = getSharedPreferences("pref",0)
// SharedPreferences 에서 데이터 불러오기
// 1번째 인자는 키, 2번째 인자는 데이터가 존재하지 않을경우의 값
binding.etHello.setText(pref.getString("name",""))
}
}
.
.
.
getSharedPreferences 인스턴스를 생성했다.
val pref = getSharedPreferences("pref", 0)
0은 SharedPreferences의 접근 모드이다.
0은 기본 모드로 사용되며, 앱 내에서 읽기 및 쓰기가 가능하다.
.
.
.
val sharedPref = activity?.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE)
.
.
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
.
.
.
val edit = pref.edit()
edit.putString("name", binding.etHello.text.toString())
edit.apply()
edit() 메서드를 호출하여 SharedPreferences를 수정할 수 있는 Editor 객체를 가져온다.
putString() 메서드를 사용하여 "name"이라는 키로 EditText에서 가져온 문자열을 저장한 뒤,
apply() 메서드를 호출하여 변경사항을 저장한다.
.
.
.
binding.etHello.setText(pref.getString("name", ""))
getString() 메서드를 사용하여 "name" 키에 해당하는 값을 가져온다.
값이 없는 경우(default) 빈 문자열("")을 반환한다.
반환된 값은 EditText 위젯에 설정되어 사용자에게 표시된다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/et_hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:textColor="#000000"
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_hello" />
</androidx.constraintlayout.widget.ConstraintLayout>
앱 종료 후에도 텍스트 데이터는 저장됨.