Android

[ Android ] 안드로이드 데이터 저장 및 관리: SharedPreferences와 파일 저장

YBin's 2025. 3. 18. 21:19

안드로이드 개발 과정에서 데이터를 저장하고 관리하는 방법은 매우 중요합니다. 이번 포스팅에서는 SharedPreferences파일 저장을 활용한 데이터 관리 방법을 다룹니다. 또한, 액티비티 생명주기와 연관된 데이터 처리 방법도 함께 살펴보겠습니다. 

1. SharedPreferences

개념

SharedPreferences는 간단한 데이터를 저장하고 관리하기 위한 안드로이드의 기본적인 저장 방식입니다. 주로 환경 설정 정보나 사용자 입력 데이터를 저장하는 데 사용됩니다.

 

특징

- <키, 값>의 조합으로 데이터 저장
- 저장 가능한 데이터 타입:
- `String`, `Int`, `Float`, `Boolean` 등
- 클래스 객체는 저장 불가
- 각 애플리케이션에 고유한 설정값을 저장
- 용량 제한이 있으므로 대량의 데이터를 저장하기에는 적합하지 않음

---

 

주요 메서드

 

사용 예제

1) 데이터 저장

// SharedPreferences 객체 생성
SharedPreferences spref = getSharedPreferences("gpref", MODE_PRIVATE);

// Editor 객체를 통해 데이터 저장
SharedPreferences.Editor editor = spref.edit();
editor.putString("key", "value");
editor.apply(); // 또는 editor.commit();


2) 데이터 불러오기

// SharedPreferences 객체에서 데이터 읽기
SharedPreferences spref = getSharedPreferences("gpref", MODE_PRIVATE);
String value = spref.getString("key", "defaultValue");


3) 데이터 삭제

// 특정 키 데이터 삭제
editor.remove("key").apply();

// 모든 데이터 삭제
editor.clear().apply();


 주의 사항

- SharedPreferences는 용량 제한이 있으므로, 대량 데이터를 저장하려면 다른 방법을 고려해야 합니다.
- 조회는 `spref` 객체를 사용하고, 수정은 반드시 `Editor` 객체를 통해야 합니다.

 

2. 파일 저장

개념

파일 저장은 데이터를 디바이스의 저장소에 직접적으로 저장하는 방식입니다. 메모장과 같은 기능을 구현하거나, 앱 종료 후에도 데이터를 유지하고 싶을 때 유용합니다.

 

파일 저장 방식

1) 데이터 쓰기

try {
    OutputStream out = openFileOutput("파일명.txt", MODE_PRIVATE);
    PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, "UTF-8"));
    writer.append("저장할 데이터");
    writer.close();
} catch (IOException e) {
    e.printStackTrace();
}


2) 데이터 읽기

try {
    InputStream in = openFileInput("파일명.txt");
    BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
    String line;
    while ((line = reader.readLine()) != null) {
        // 데이터를 읽어서 처리
    }
    reader.close();
} catch (IOException e) {
    e.printStackTrace();
}


파일 저장 위치

- 파일은 앱의 내부 저장소에 저장되며, 기본적으로 앱 외부에서는 접근할 수 없습니다.
- 디바이스 탐색기를 통해 저장된 파일을 확인할 수 있습니다.
- Android Studio → View → Tool Windows → Device File Explorer

Raw 파일 활용

- `res/raw` 폴더에 읽기 전용 파일을 추가할 수 있습니다.
- 파일 읽기:

InputStream in = getResources().openRawResource(R.raw.raw_data);
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));

 


3. 액티비티 생명주기와 데이터 처리

안드로이드에서 액티비티는 다양한 상태를 거치며 실행됩니다. 데이터를 안정적으로 저장하고 불러오기 위해 생명주기를 이해해야 합니다.

 

액티비티 생명주기

 


주요 메서드

| `onCreate()` | 액티비티가 처음 생성될 때 호출. 초기 데이터 로드 시 사용             |
| `onResume()` | 액티비티가 화면에 나타날 때 호출. 데이터 갱신에 적합                 |
| `onPause()`  | 액티비티가 일시정지될 때 호출. 데이터 저장 및 리소스 해제에 사용     |


데이터 처리 예제

1. onCreate에서 초기 데이터 로드

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       // 데이터 로드
       InputStream in = getResources().openRawResource(R.raw.raw_data);
       // 데이터 처리 코드
   }



2. onResume에서 데이터 갱신

   @Override
   protected void onResume() {
       super.onResume();

       // 데이터 갱신
       InputStream in = openFileInput("파일명.txt");
       // 데이터 처리 코드
   }




3. onPause에서 데이터 저장

   @Override
   protected void onPause() {
       super.onPause();

       // 데이터 저장
       OutputStream out = openFileOutput("파일명.txt", MODE_PRIVATE);
       // 데이터 처리 코드
   }

 

4. 정리

- SharedPreferences는 간단한 데이터 저장에 적합하며, 환경 설정 정보 저장에 유용합니다.
- 파일 저장은 대량의 데이터를 저장하거나, 앱 종료 후에도 데이터를 유지할 때 적합합니다.
- 액티비티 생명주기를 활용하여 데이터를 안정적으로 저장하고 불러올 수 있습니다.