본문 바로가기

ANDROID의 속삭임

[android][OBJECT]SharedPreferences

* SharedPreferences는 안드로이드 애플리케이션에 지역 데이터를 저장하기 위한 가장 단순하고 빠른 효과적인 방법이다.

  • 키/값 쌍으로 저장.
  • 필수 프레임워크
  • 저장을 위해서는 커밋이 필요하다.
  • 모든 애플리케이션은 자신의 SharedPreferences클래스와 관련 되어 있기 때문에 저장 후 커밋된 데이터는 모든 사용자 세션을 넘어 유지된다.
  • 단순함과 효율적인 특성으로 인해 기본데이터 타입( boolean, float, long, int, string)만 저장가능하다.(StringSet이 추가됨)

* 사용법
SharedPreferences sp = getSharedPreferences("mydb", Context.MODE_PRIVATE);
Editor e1 = sp.edit();
e1.putString("KeyString", "ValueString");
e1.commit;

sp.getString("KeyString", "IfEmptyDefaultString");


* 인스턴스 가시성 지정 : getSharedPreferences()메소드에서 두번째 인자 값으로 지정한다.

  • MODE_WORLD_READABLE : 다른 애플리케이션에서 접근 가능하게 맵의 가시성을 설정한다. 내용 contents은 읽기 전용이다.
  • MODE_WORLD_WRITABLE : 다른 애플리케이션에서 접근 가능하게 맵의 가시성을 설정한다. 읽기와 쓰기 모두 가능하다.
  • MODE_MULTI_PROCESS : API 레벨 11이후로 사용 가능한 모드로 다중 프로세스에 의해 맵을 수정할 수 있게 허용함으로써 동일한 SharedPreference 인스턴스에 쓰기 작업이 일어날 수 있다.




* 가급적이면 보안성을 위해 MODE_WORLD_WRITABLE는 하지 않는 것이 좋다. 하지만 두 어플리케이션간에 공유가 필요할때는 고민을 하게 된다. 이를 위해 간단히 애플리케이션의 매니페스트파일에 android:sharedUserId를 설정 하는 방법이 개발된다. 모든 애플리케이션은 서명되고, 노출될 때 자동으로 생성된 애플리케이션ID가 할당돼 동작한다. 하지만 명시적으로 애플리케이션 매니페스트 파일에 이 ID를 설정하기를 원하고 두 애플리케이션이 같은 키로 서명돼 있다면 사용자의 전화기상의 다른 애플리케이션으로 자신의 데이터를 노출 하지 않고도 서로의 데이터에 자유롭게 접근할 수 있다. 즉, 두 애플리케이션에 대해 동일 ID를 설정해 두 애플리케이션에 한해서 서로의 데이터에 접근이 가능하게 된다.