Android (안드로이드)

[Android] SharedPreferences (2) - 사용 예제, 응용 / 데이터 저장 / 데이터 불러오기 / 데이터 삭제 / split() 메서드

Oscar:) 2022. 9. 7. 21:33

 

지난 포스팅에서는 SharedPreferences 에 대해 알아보았다.

 

이번 포스팅에서는 SharedPreferences 를 직접 사용해보자.

 


 

SharedPreferences 사용 예제

 

테스트해 볼 예제의 내용을 간단히 설명하겠다.

 

● EditText 에 데이터를 입력하고 버튼을 누른다.

● TextView 에 데이터가 표시되고, SharedPreferences 에 저장된다.

● SharedPreferences 파일을 찾아서 저장된 내용을 확인한다.

● 앱이 시작되면 데이터를 불러와서 표시되게끔 한다.

● 앱을 종료 & 재시작하고 데이터가 표시되는지 확인한다.

 

 

각각 3개의 TextView 와 EditText 를 세팅한 레이아웃이다.

 

 

레이아웃 xml 코드는 따로 첨부하지 않겠다.

 

 

이제 java 코드도 기본적인 세팅을 해준다.

 

MainActivity.java

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
        
   // 객체와 View 연결
   TextView name_Text = findViewById(R.id.name_Text);
   TextView age_Text = findViewById(R.id.age_Text);
   TextView nickname_Text = findViewById(R.id.nickname_Text);
   EditText name_EditText = findViewById(R.id.name_EditText);
   EditText age_EditText = findViewById(R.id.age_EditText);
   EditText nickname_EditText = findViewById(R.id.nickname_EditText);
   Button button = findViewById(R.id.apply_Btn);
        
   // 버튼 클릭 이벤트
   button.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
            
      // EditText 입력 데이터를 변수에 초기화
      String name = name_EditText.getText().toString();
      String age = age_EditText.getText().toString();
      String nickname = nickname_EditText.getText().toString();
                
      // 위 변수를 TextView 에 표시해줌
      name_Text.setText(name);
      age_Text.setText(age);
      nickname_Text.setText(nickname);
                
      // EditText 칸을 깔끔히 비워줌
      name_EditText.setText("");
      age_EditText.setText("");
      nickname_EditText.setText("");
                
        }
     });
   }

}

 

SharedPreferences 를 작성하기 전의 코드라서, 핵심적인 내용은 없지만

이해를 돕기 위해 주석을 틈틈이 작성해놓았으니 읽어보기 바란다.

 

 

입력 칸에 정보를 모두 입력하고, 버튼을 누르면

상단의 TextView 에 데이터가 표시된다.

 

 

하지만, 앱을 종료 & 재시작하면 데이터가 초기화되는 것을 확인할 수 있다.

 

 

 

 


 

SharedPreferences 에 데이터 저장하기

 

데이터를 저장하는 문법은 다음과 같다.

 SharedPreferences sharedPreferences = getSharedPreferences("저장될 파일 이름",MODE_PRIVATE);
 SharedPreferences.Editor editor = sharedPreferences.edit();
 editor.putString("Key","Value");
 editor.commit();

 

결론만 보면, 큰 따옴표("") 표시된 부분만 수정하여 사용하면 된다.

 

 

● getSharedPreferences() 메서드의 매개변수는 다음과 같다.

 

 

1. 저장될 파일 이름 지정

 

이전 글에서도 설명했지만, SharedPreferences 는

데이터를 파일 형식으로 저장한다.

여기에서 그 파일의 이름을 지정해 줄 수 있다.

 

 

2. MODE 지정

 

저장된 파일을 관리할 방식을 지정해준다.

 

-MODE_PRIVATE

생성한 앱에서만 관리할 수 있다.

 

-MODE_APPEND

데이터를 덧붙여 쓸 수 있다.

 

-MODE_NO_LOCALIZED_COLLATORS : 

데이터 정렬기를 지원하지 않고 DB가 열린다.

 

-MODE_ENABLE_WRITE_AHEAD_LOGGING

DB가 열리고 미리 쓰기 로깅이 활성화 된다.

 

-MODE_MULTL_PROCESS : Deprecated

-MODE_WORLD_READABLE : Deprecated

-MODE_WORLD_WRITEABLE : Deprecated

 

 

특별한 경우가 아니라면, MODE_PRIVATE 를 사용하면 된다.

 

 

● editor.putString() 메서드의 Key - Value 방식은

앞서 알아보았던 Intent 의 방식과 매우 유사하다.

 

● editor.commit() 메서드는 SharedPreferences 의 데이터가

변경될 때마다 작성해주어야 한다. (저장, 삭제 등)

 

 


 

이제 MainActivity.java 코드에 SharedPreferences 를 작성해주자.

  @Override
  public void onClick(View view) {
              
      // SharedPreferences 에 저장하기
      SharedPreferences sharedPreferences = getSharedPreferences("사용자 정보",MODE_PRIVATE);
      SharedPreferences.Editor editor = sharedPreferences.edit();
      editor.putString("이름",name);
      editor.putString("나이",age);
      editor.putString("별명",nickname);
      editor.commit();
              
            }

 

MainActivity.java 전체 코드는 위에 첨부하였으니,

onClick 메서드 부분만 작성하였다.

해당 위치에 잘 끼워 넣길 바란다.

 

 

이제, 앱을 실행시켜서 정보를 입력하고 버튼을 눌러보자.

 

 

 

 


 

SharedPreferences 파일 확인

 

SharedPreferences 에 저장이 잘 되었다면,

파일이 생성되었을 것이다. 한 번 찾아보자.

 

먼저, Device File Explorer 탭을 찾으면 된다.

 

안스 버전에 따라서 우측 하단에 전용 탭이 있을 수도 있고,

좌측 상단에 View > Tool Windows 탭에 있을 수도 있다.

 

 

보통의 경우, 패키지 이름(앱 이름)의 폴더가 생성되어 있을 것이다.

해당 폴더를 찾아가 보면, SharedPreferences 폴더가 생성된 것을 확인할 수 있다.

 

그리고 그 폴더 안에는, 작성한 이름의 파일이 생성되어 있다.

 

 

작성했던 Key - Value 형태의 데이터가 파일로 저장된 것을 확인할 수 있다.

 

 

 

 


 

SharedPreferences 에 저장된 데이터 불러오기

 

데이터가 파일 형태로 잘 저장된 것까지 확인했다면,

이제 필요한 상황에서 데이터를 불러올 줄 알아야 한다.

 

데이터를 불러오는 문법은 다음과 같다.

 SharedPreferences sharedPreferences = getSharedPreferences("저장된 파일 이름",MODE_PRIVATE);
 sharedPreferences.getString("Key","defaultValue");

 

● 첫 번째 줄은 데이터를 저장할 때와 동일하다.

 

물론, getSharedPreferences() 메서드의 첫 번째 매개변수인

'저장된 파일 이름' 역시 동일해야 한다.

 

 

 

● 두 번째 줄을 유심히 봐야한다.

 

getString() 메서드의 매개변수 역시, 첫 번째 매개변수는 동일하다.

저장된 'Key' 값과 동일한 'Key' 의 데이터를 받아온다.

 

두 번째 매개변수에는 'defaultValue' 가 들어간다.

해당하는 'Key' 값이 존재하지 않을 시, 대체 될 값을 입력해주면 된다.

 

보통의 경우, 두 번째 줄의 코드를 String 변수에 초기화해서 사용한다.

 

 

 

이제 MainActivity.java 코드에 작성해준다.

   @Override
   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
        
   SharedPreferences sharedPreferences = getSharedPreferences("사용자 정보",MODE_PRIVATE);
   String name = sharedPreferences.getString("이름","");
   String age = sharedPreferences.getString("나이","");
   String nickname = sharedPreferences.getString("별명","");

   name_Text.setText(name);
   age_Text.setText(age);
   nickname_Text.setText(nickname);
        
   }

 

onCreate() 메서드 부분만 첨부하겠다.

 

앱이 실행되고, onCreate() 메서드가 호출되면 SharedPreferences 에

저장된 데이터를 불러와서 TextView 에 표시해 줄 것이다.

 

 

 

실행 결과는 다음과 같다.

 

 

앱을 종료하고 재실행하여도 데이터가 저장되어 있는 것을 확인할 수 있다.

 

 

 

 


 

SharedPreferences 에 저장된 데이터 삭제하기

 

데이터를 저장했다면, 삭제하는 방법 또한 알아야 한다.

 

데이터를 삭제하는 방법에는 2가지가 있다.

 

    // 특정 데이터만 삭제
    SharedPreferences sharedPreferences = getSharedPreferences("파일 이름",MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.remove("삭제할 데이터 Key값");
    editor.commit();
                
    // 전체 삭제
    SharedPreferences sharedPreferences = getSharedPreferences("파일 이름",MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.clear();
    editor.commit();

 

remove() 메서드를 사용하여 일부 데이터만 삭제하는 방법과,

clear() 메서드를 사용하여 데이터 전체를 삭제하는 방법이 있다.

 

상황에 따라 알맞는 메서드를 사용하길 바란다.

 

 

 

 

SharedPreferences 응용하기

 

SharedPreferences 는 1Key - 1Value 방식을 원칙으로 한다.

 

하지만, 개발자란 역시 응용할 줄 알아야 하는 법이다.

 

누군가는 여러개의 Key 를 관리하는 것조차 불필요하다고 느낄 수 있다.

그리하여, 1Key - 다중 Value 방식으로 응용해보도록 하자.

 

 

과정을 먼저 설명하자면, 다음과 같다.

 

● 여러 Value 값을 하나의 String 에 이어 붙여서 욱여넣고 저장한다.
- 겉으로는 1Key - 1Value 인 것처럼 보여지는 것이다.

● SharedPreferences 에 저장된 데이터를 불러온다.

● 불러온 데이터를 split 을 사용해 나눠준다.

● 나눠진 데이터를 알맞게 적용시킨다.

 

*split() 메서드는 해당 문자를 기준으로 문자열을 분리해주는 함수이다.

 

 

 

먼저, SharedPreferences 에 저장하는 문법을 수정해준다.

 SharedPreferences sharedPreferences = getSharedPreferences("사용자 정보",MODE_PRIVATE);
 SharedPreferences.Editor editor = sharedPreferences.edit();
 editor.putString("정보",name + "," + age + "," + nickname);
 editor.commit();

 

putString() 의 두 번째 매개변수에 데이터가 욱여넣어진 모습이다.

데이터 사이에는 반점(,) 을 추가해 주었다.

 

 

위에서 해보았던 대로, SharedPreferences 파일을 확인해보자.

 

 

데이터가 의도한 대로 파일에 잘 저장된 것을 확인하였다.

 

 

이제 저장한 데이터를 불러오는 부분을 수정해준다.

 SharedPreferences sharedPreferences = getSharedPreferences("사용자 정보",MODE_PRIVATE);
 String userInfo = sharedPreferences.getString("정보","");
 
 // 1번
 String[] info = userInfo.split(",");

 // 2번
 String name = info[0];
 String age = info[1];
 String nickname = info[2];

 name_Text.setText(name);
 age_Text.setText(age);
 nickname_Text.setText(nickname);

 

① split() 으로 나눠진 데이터를 배열에 담아준다.

 

데이터를 저장할 때 반점(,)을 추가해 준 이유는 split() 함수를 사용하기 위함이다.

반점이 아닌, 다른 문자를 사용해도 무방하다.

 

 

② 배열에 담긴 데이터를 각각의 변수에 초기화 해준다.

 

 

 

응용 결과 역시 성공적이다.

 

1 Key - 다중 Value 방식으로 SharedPreferences 를 구현하였다.

 

 

 

 


 

이번 포스팅까지, SharedPreferences 에 대해 알아보았다.

 

데이터 저장 방식에 있어서는, 비록 정석적인 DB 방식이 아니었지만

데이터를 처음 저장해 보았다는 것은 큰 의미가 있었다.