자바 안드로이드 앱개발 강좌, 공유된 프리퍼런스에 보관하기

안드로이드 개발을 진행하다 보면 애플리케이션의 일부 설정값이나 사용자 정보를 보관해야 하는 경우가 많습니다.
이때 사용되는 것이 바로 공유된 프리퍼런스(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 라이브러리를 사용하여 더 많은 데이터를 효율적으로 관리하는 방법에 대해서도 다룰 예정입니다.