안드로이드 SharedPreferences(공유 환경설정)란?
SharedPreferences는 안드로이드에서 데이터를 키(key)와 값(value) 쌍의 형태로 저장하거나 불러올 수 있게 해주는 가장 기본적인 데이터 저장 방식입니다. 로그인 상태, 사용자 설정, 간단한 문자열이나 숫자 값 등을 영구적으로 보관할 때 널리 활용됩니다.
SharedPreferences에서 자주 사용되는 5가지 핵심 메서드는 다음과 같습니다.
edit() – SharedPreferences의 값을 편집할 수 있는 Editor 객체를 생성합니다.
commit() – 편집된 내용을 XML 파일에 즉시(동기적으로) 저장하며, 성공 여부를 boolean 값으로 반환합니다.
apply() – 에디터의 변경 사항을 백그라운드에서 비동기적으로 반영합니다. UI 스레드에 부담이 적어 일반적으로 더 권장됩니다.
remove(String key) – 지정한 키와 그에 해당하는 값을 SharedPreferences에서 삭제합니다.
put() – putString(), putInt() 등의 형태로 키와 값을 SharedPreferences XML 파일에 저장합니다.
기본 문법
SharedPreferences의 기본적인 사용 문법은 아래와 같습니다.
final SharedPreferences sharedPreferences = getSharedPreferences("USER",MODE_PRIVATE);위 코드는 USER.xml이라는 이름의 공유 환경설정 파일을 생성합니다. 두 번째 인자인 MODE_PRIVATE는 private 모드를 의미하며, 이 경우 해당 파일은 생성한 앱에서만 접근할 수 있고 다른 애플리케이션은 이 데이터에 접근할 수 없습니다.
이제 실제 예제를 통해 안드로이드에서 SharedPreferences를 사용하는 방법을 단계별로 살펴보겠습니다.
실전 예제: 이름과 전화번호 저장하기
1단계 – 새 프로젝트 생성
Android Studio에서 File → New Project를 선택한 뒤, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.
2단계 – 레이아웃 작성 (res/layout/activity_main.xml)
아래 코드를 activity_main.xml에 추가합니다.
<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android = "https://schemas.android.com/apk/res/android"
xmlns:app = "https://schemas.android.com/apk/res-auto"
xmlns:tools = "https://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical"
tools:context = ".MainActivity"
tools:layout_editor_absoluteY = "81dp">
<EditText android:id = "@+id/name"
android:layout_width = "match_parent"
android:layout_height = "60dp"
android:layout_marginTop = "8dp"
android:autofillHints = ""
android:hint = "NAME" app:layout_constraintTop_toTopOf = "parent"
tools:layout_editor_absoluteX = "0dp" />
<EditText android:id = "@+id/address" android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_marginTop = "84dp"
android:hint = "Phone Number"
android:importantForAutofill = "no"
android:inputType = ""
app:layout_constraintTop_toTopOf = "@+id/name"
tools:layout_editor_absoluteX = "16dp"
tools:targetApi = "o" />
<Button
android:id = "@+id/button"
android:layout_width = "108dp"
android:layout_height = "wrap_content"
android:layout_marginStart = "8dp"
android:layout_marginLeft = "8dp"
android:layout_marginTop = "120dp"
android:layout_marginEnd = "8dp"
android:layout_marginRight = "8dp"
android:gravity = "center_horizontal"
android:text = "Save"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintHorizontal_bias = "0.503"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toTopOf = "@+id/address" />
<Button
android:id = "@+id/read"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_marginStart = "8dp"
android:layout_marginLeft = "8dp"
android:layout_marginTop = "88dp"
android:layout_marginEnd = "8dp"
android:layout_marginRight = "8dp"
android:gravity = "center_horizontal"
android:text = "read"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toBottomOf = "@+id/button" />
<TextView
android:id = "@+id/result"
android:layout_width = "wrap_content"
android:layout_height = "0dp"
android:layout_marginStart = "8dp"
android:layout_marginLeft = "8dp"
android:layout_marginTop = "184dp"
android:layout_marginEnd = "8dp"
android:layout_marginRight = "8dp"
android:text = "result"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toBottomOf = "@+id/button" />
</android.support.constraint.ConstraintLayout>위 XML에는 이름(name)과 전화번호(address)를 입력받는 두 개의 EditText가 포함되어 있습니다. 사용자가 Save 버튼을 클릭하면 입력한 값이 SharedPreferences에 저장되고, read 버튼을 클릭하면 저장된 값을 다시 읽어와 화면에 표시합니다.
3단계 – MainActivity.java 작성
src/MainActivity.java에 아래 코드를 추가합니다.
package com.example.andy.myapplication;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final SharedPreferences sharedPreferences = getSharedPreferences("USER",MODE_PRIVATE);
final EditText name = findViewById(R.id.name);
final EditText address = findViewById(R.id.address);
final TextView result = findViewById(R.id.result);
Button save = findViewById(R.id.button);
Button read = findViewById(R.id.read);
read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText("Name is "+sharedPreferences.getString("Name","No name")+" Address "+ sharedPreferences.getString("Address","No Address"));
}
});
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(name.getText().toString().isEmpty() && address.getText().toString().isEmpty()) {
Toast.makeText(MainActivity.this,"Plz Enter all the data",Toast.LENGTH_LONG).show();
} else {
String nameData = name.getText().toString().trim();
String addressData = address.getText().toString().trim();
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("Name",nameData);
editor.putString("Address",addressData);
editor.commit();
}
}
});
}
}코드를 살펴보면, Save 버튼 클릭 시 입력값이 비어 있는지 검사한 뒤 edit()으로 Editor 객체를 얻고 putString()으로 값을 담은 후 commit()으로 저장합니다. read 버튼 클릭 시에는 getString()으로 저장된 값을 가져와 TextView에 출력하며, 값이 없을 경우 기본값("No name", "No Address")이 대신 표시됩니다.
4단계 – 앱 실행
manifest.xml은 별도로 수정할 필요가 없습니다. 실제 Android 기기를 컴퓨터에 연결한 상태에서 Android Studio의 Run 아이콘
을 클릭해 앱을 실행합니다. 실행 옵션에서 연결된 모바일 기기를 선택하면 아래와 같은 기본 화면이 나타납니다.

위 예제에서는 이름과 전화번호를 입력한 뒤 Save 버튼을 클릭했습니다.

이어서 read 버튼을 클릭하면 SharedPreferences에 저장되어 있던 값이 읽혀져 TextView에 표시됩니다.