안드로이드 개발을 진행하다 보면 애플리케이션의 일부 설정값이나 사용자 정보를 보관해야 하는 경우가 많습니다.
이때 사용되는 것이 바로 공유된 프리퍼런스(SharedPreferences)입니다.
공유된 프리퍼런스는 간단한 키-값 쌍을 사용하여 데이터를 저장하는 데 유용하며, 적은 양의 데이터를 저장하는 데 적합합니다.
본 강좌에서는 공유된 프리퍼런스를 활용하여 사용자 정보를 저장하고 불러오는 방법에 대해 다루겠습니다.
1. 공유된 프리퍼런스란?
공유된 프리퍼런스는 안드로이드의 경량 데이터 저장소로, 애플리케이션의 설정, 사용자 정보 등을 쉽게 저장하고 복구할 수 있는
메커니즘을 제공합니다. 작은 데이터 세트를 저장하는 데 적합하며, 데이터는 앱의 데이터 디렉토리에 XML 파일 형식으로 저장됩니다.
2. 공유된 프리퍼런스를 사용하는 이유
- 간단한 데이터 저장: 사용자 설정, 로그인 정보 등의 간단한 정보를 쉽게 저장할 수 있습니다.
- 공유 가능: 여러 액티비티 간에 공유된 값을 손쉽게 접근할 수 있습니다.
- 경량: 복잡한 데이터베이스를 사용하기에는 불필요한 경우에 유용합니다.
3. 공유된 프리퍼런스의 기본 사용법
공유된 프리퍼런스를 사용하는 과정은 크게 세 단계로 나눌 수 있습니다:
생성, 데이터 저장, 데이터 조회.
3.1 공유된 프리퍼런스 생성
공유된 프리퍼런스를 생성하는 방법은 다음과 같습니다. 아래의 코드는 `MainActivity` 클래스에서 공유된 프리퍼런스를 생성하는 예시입니다.
SharedPreferences sharedPreferences = getSharedPreferences("MyPreferences", MODE_PRIVATE);
3.2 데이터 저장
공유된 프리퍼런스에 데이터를 저장할 때는 `Editor`를 사용해야 합니다. 아래는 사용자 이름과 나이를 저장하는 예제입니다.
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("username", "홍길동");
editor.putInt("age", 25);
editor.apply();
3.3 데이터 조회
저장한 데이터를 조회할 때는 `getString` 또는 `getInt` 메서드를 사용합니다. 아래의 코드는 저장된 사용자 정보를 조회하는 예제입니다.
String username = sharedPreferences.getString("username", "기본값");
int age = sharedPreferences.getInt("age", 0);
4. 실습 예제
아래는 전체적인 공유된 프리퍼런스를 활용한 예제 코드입니다. 사용자가 입력한 정보를 저장하고, 저장된 정보를 화면에 표시하는 앱을 만들어 보겠습니다.
4.1 레이아웃 파일 (activity_main.xml)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/editTextUsername"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="사용자 이름"/>
<EditText
android:id="@+id/editTextAge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="나이"
android:inputType="number"/>
<Button
android:id="@+id/buttonSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="저장"/>
<TextView
android:id="@+id/textViewResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
4.2 메인 액티비티 (MainActivity.java)
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private SharedPreferences sharedPreferences;
private EditText editTextUsername, editTextAge;
private TextView textViewResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextUsername = findViewById(R.id.editTextUsername);
editTextAge = findViewById(R.id.editTextAge);
textViewResult = findViewById(R.id.textViewResult);
Button buttonSave = findViewById(R.id.buttonSave);
sharedPreferences = getSharedPreferences("MyPreferences", MODE_PRIVATE);
loadStoredData();
buttonSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = editTextUsername.getText().toString();
int age = Integer.parseInt(editTextAge.getText().toString());
saveData(username, age);
}
});
}
private void saveData(String username, int age) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("username", username);
editor.putInt("age", age);
editor.apply();
loadStoredData();
}
private void loadStoredData() {
String username = sharedPreferences.getString("username", "기본값");
int age = sharedPreferences.getInt("age", 0);
textViewResult.setText("사용자 이름: " + username + "\n나이: " + age);
}
}
5. 주의사항
공유된 프리퍼런스는 적은 양의 데이터 저장에 적합합니다.
큰 데이터를 저장하거나 복잡한 데이터 구조를 저장해야 하는 경우 SQLite 데이터베이스나 Room 라이브러리를 사용하는 것이 좋습니다.
6. 결론
본 강좌에서는 공유된 프리퍼런스를 통해 간단한 사용자 정보를 저장하고 조회하는 방법을 배우았습니다.
이러한 기능을 활용하여 사용자 경험을 향상시키는 다양한 애플리케이션을 개발할 수 있습니다.
추후에는 Room 라이브러리를 사용하여 더 많은 데이터를 효율적으로 관리하는 방법에 대해서도 다룰 예정입니다.