Shared Preferences는 개발자가 소량의 데이터를 키-값 쌍으로 저장하고 조회할 수 있게 하는 모바일 앱 개발의 필수 기능입니다. 이 메커니즘은 앱 세션 간에 유지되어야 하는 사용자 설정, 앱 상태, 기타 구성 데이터를 저장하는 데 특히 유용합니다. Shared Preferences는 Android 플랫폼의 일부이며 복잡한 데이터베이스 설정 없이도 영구 데이터를 처리하는 간단하고 효율적인 방법을 제공합니다.
앱이 Shared Preferences를 사용하면 데이터는 앱 내부 저장소의 XML 파일에 저장됩니다. 이를 통해 앱은 데이터에 빠르게 접근하고 업데이트할 수 있으며, 사용자의 기본 설정과 설정을 사용 가능한 최신 상태로 유지하여 사용자 경험을 개선합니다. Shared Preferences는 가볍고 앱 전용이 되도록 설계되었지만 암호화되지는 않으므로 성능과 사용성 모두에 최적화된 앱에서 민감하지 않은 데이터에 이상적인 선택입니다.
Shared Preferences는 소량의 데이터를 기기 로컬 저장소에 키-값 쌍으로 저장하는 간단하고 효율적인 방법으로, 모바일 애플리케이션이 세션 간에 사용자 설정과 애플리케이션 상태를 유지할 수 있게 합니다. 이 기능은 데이터베이스 없이도 가벼운 솔루션을 제공하므로 테마 설정이나 사용자의 로그인 여부 같은 사용자 기본 설정을 저장하는 데 이상적입니다. 데이터는 애플리케이션이 종료되거나 다시 시작된 뒤에도 사용할 수 있으므로 일관되고 개인화된 사용자 경험을 보장합니다. Shared Preferences는 영구 데이터에 빠르게 접근해야 하고 보안 요구가 보통인 경우에 특히 유용합니다. 데이터는 기본적으로 암호화되지 않으므로 비밀번호와 기타 비밀 정보를 암호화하지 않은 채 저장해서는 안 됩니다.
More about Shared Preferences
Shared Preferences는 소량의 데이터를 키-값 쌍으로 간단하고 효율적으로 저장할 수 있게 하는 모바일 앱 개발의 필수 기술입니다. 이 방법은 앱 세션 간에 유지되어야 하는 사용자 설정, 애플리케이션 기본 설정, 기타 영구 데이터를 저장하는 데 이상적입니다. Shared Preferences는 사용자 설정, 로그인 상태, 앱 구성처럼 데이터에 대한 빠른 접근과 사용 편의성이 중요한 경우에 특히 적합합니다.
기술적으로 Shared Preferences는 앱 내부 저장소에 있는 XML 파일에 데이터를 저장합니다. 앱이 데이터를 저장하거나 조회하려고 하면 읽기 및 쓰기 작업을 처리하는 API를 통해 이 파일과 상호작용합니다. 이 때문에 Shared Preferences는 효율적이면서 구현하기 쉬우며, 이는 복잡한 데이터베이스 작업 없이 가벼운 데이터 관리를 원하는 개발자에게 큰 장점입니다.
Shared Preferences는 다양한 시나리오에서 사용할 수 있으며, 각 시나리오는 서로 다른 유형의 데이터 처리를 지원합니다.
사용자 설정 저장: Shared Preferences는 테마, 알림 기본 설정, 언어 선택 같은 사용자 정의 설정을 저장하는 데 사용됩니다. 이를 통해 앱을 닫았다가 다시 열어도 사용자의 기본 설정이 유지됩니다.
세션 관리: Shared Preferences는 로그인 상태나 사용자 ID 같은 세션 관련 데이터를 저장하는 데 사용할 수 있으며, 이를 통해 앱은 반복 로그인 없이 세션 간에 사용자를 기억할 수 있습니다. 액세스 토큰과 기타 비밀 정보는 저장하기 전에 암호화해야 합니다.
구성 데이터: 애플리케이션은 기능 설정이나 기본값처럼 앱 기능에 필요한 구성 데이터를 저장할 수 있으며, 이를 통해 코드를 변경하지 않고도 앱의 동작을 쉽게 조정할 수 있습니다. 기기에 저장된 것은 무엇이든 추출될 수 있으므로 비밀 API 키는 Shared Preferences에 두어서는 안 됩니다.
Shared Preferences의 가장 큰 강점 중 하나는 단순성과 효율성입니다. 키-값 쌍을 통해 데이터에 쉽게 접근할 수 있으므로 개발자는 복잡한 데이터베이스 작업을 걱정하지 않고도 영구 데이터 저장을 빠르게 구현할 수 있습니다. 또한 데이터는 해당 앱만 접근할 수 있으므로 어느 정도의 보안과 개인정보 보호를 제공합니다.
Shared Preferences의 낮은 자원 소비는 또 다른 중요한 장점입니다. 이 기술은 최소한의 저장 공간과 처리 능력만 필요하므로 자원 최적화가 중요한 모바일 기기에 이상적입니다. 데이터는 앱 내부 저장소에 저장되므로 일반적으로 다른 앱의 접근으로부터도 보호됩니다.
실제로 Shared Preferences는 오랫동안 Android 앱에서 간단한 사용자 데이터를 저장하는 표준 방법이었습니다. 사용자의 기본 설정과 상태를 기억하여 사용자 경험을 일관되고 개인화된 상태로 유지하는 데 사용됩니다. 또한 반복적인 데이터 요청과 네트워크 호출의 필요성을 줄여 앱의 성능을 최적화하는 데도 사용됩니다.
요약하면 Shared Preferences는 단순성과 효율성을 하나의 솔루션으로 결합하여 개발자에게 데이터 저장을 더 직관적이고 쉽게 만드는 기술입니다. 복잡한 설정 없이 최소한의 자원 소비로 작동하는 능력 덕분에 Shared Preferences는 빠르고 안정적인 데이터 처리가 필수인 현대 앱 개발에서 중요한 도구입니다.
Frequently asked questions about Shared Preferences
Shared Preferences란 무엇이며, Android 개발에서 어떻게 작동합니까?
Android 개발에서 Shared Preferences는 애플리케이션의 여러 구성 요소에서 접근할 수 있는 간단한 데이터를 키-값 쌍으로 저장하는 메커니즘입니다. 이 방법은 사용자 설정이나 애플리케이션 구성처럼 데이터베이스가 필요 없는 소량의 데이터를 저장하는 데 이상적입니다.
애플리케이션이 Shared Preferences를 사용하면 저장된 데이터를 담은 파일이 생성되며, 이 파일은 이를 만든 애플리케이션만 접근할 수 있습니다. 데이터는 애플리케이션 내부 저장소의 XML 파일에 저장되므로 루팅되지 않은 일반 기기에서는 다른 앱의 접근으로부터 보호됩니다. 개발자는 getSharedPreferences(), edit(), putString() 같은 메서드와 변경 사항을 저장하는 commit() 또는 apply()를 사용하여 이 파일을 쉽게 읽고 쓸 수 있습니다.
SQLite 데이터베이스 같은 더 복잡한 저장 솔루션도 있습니다. 이에 반해 Shared Preferences는 특히 구조화된 저장이나 복잡한 쿼리가 필요 없는 간단한 데이터만 저장하면 될 때 훨씬 간단하고 빠르게 구현할 수 있습니다. 이 때문에 Shared Preferences는 소량의 데이터를 빠르고 쉽게 저장하고 조회해야 하는 많은 애플리케이션에 효율적인 선택입니다.
Shared Preferences를 사용하여 데이터를 어떻게 저장하고 조회합니까?
데이터는 Shared Preferences에 키-값 쌍으로 저장됩니다. 먼저 일반적으로 getSharedPreferences와 파일 이름을 사용하여 SharedPreferences 객체를 얻습니다. 데이터를 저장하려면 edit()로 편집기를 열고 putString이나 putBoolean 같은 메서드로 값을 추가한 다음, 비동기적으로 쓰는 apply() 또는 즉시 쓰는 commit()으로 변경 사항을 저장합니다.
데이터는 getString이나 getInt 같은 메서드로 조회하며, 키와 함께 키가 없을 때 사용할 기본값을 지정합니다. 새로운 Android 프로젝트에서는 Google이 더 현대적인 대안으로 DataStore를 권장하는 경우가 많지만 키와 값의 원리는 같습니다.
Shared Preferences에는 어떤 데이터 유형을 저장할 수 있습니까?
Shared Preferences는 간단한 데이터 유형을 지원합니다. 텍스트 문자열(String), 정수(int), 긴 정수(long), 소수(float), 참/거짓 값(boolean)이 해당합니다. 텍스트 문자열 집합(Set of String)도 저장할 수 있습니다.
더 복잡한 객체는 직접 저장할 수 없습니다. 예를 들어 JSON으로 텍스트로 변환할 수는 있지만 소량의 데이터에만 권장됩니다. Shared Preferences는 사용자 설정, 선택한 테마, 소개 화면 표시 여부 같은 가벼운 정보를 위한 것입니다. 더 크거나 구조화된 데이터는 Room 같은 데이터베이스나 파일에 두어야 합니다.
Shared Preferences와 SQLite 같은 다른 저장 방법의 차이점은 무엇입니까?
Shared Preferences는 소량의 데이터를 기기의 파일에 키-값 쌍으로 저장합니다. 사용하기 간단하지만 크거나 복잡한 데이터에는 적합하지 않으며 제대로 된 쿼리도 불가능합니다.
흔히 Room을 통해 사용하는 SQLite는 대량의 구조화된 데이터, 테이블 간 관계, 고급 검색을 처리할 수 있는 관계형 데이터베이스입니다. 파일은 이미지, 문서, 기타 더 큰 데이터에 적합합니다. DataStore는 비동기 접근을 제공하는 Google의 새로운 Shared Preferences 대안입니다. 선택은 데이터 양에 따라 달라지며, 설정은 Shared Preferences나 DataStore에, 구조화된 데이터는 데이터베이스에 둡니다.
Shared Preferences에 저장된 데이터는 어떻게 보호합니까?
Shared Preferences의 데이터는 앱 전용 폴더에 일반 텍스트로 저장됩니다. 다른 앱은 일반적으로 접근할 수 없지만 루팅된 기기나 특정 백업을 통해서는 파일을 읽을 수 있습니다. 따라서 비밀번호, 토큰, 기타 민감한 정보는 암호화하지 않은 채 저장해서는 안 됩니다.
민감한 데이터는 암호화 키를 보호하도록 설계된 Android Keystore에 보관한 키를 사용하여 저장 전에 암호화할 수 있습니다. Jetpack 라이브러리 androidx.security:security-crypto는 이전에 이 목적으로 EncryptedSharedPreferences를 제공했지만, Google은 2025년 4월 버전 1.1.0-alpha07부터 EncryptedSharedPreferences, EncryptedFile, MasterKey를 포함한 라이브러리 전체를 지원 중단으로 표시했습니다. Google은 대신 SharedPreferences 같은 플랫폼의 일반 API를 Android Keystore의 직접 사용과 함께 쓰도록 권장하며, 이 경우 KeyGenerator로 키를 생성하고 이를 사용하여 값을 저장하기 전에 암호화합니다. 일반적으로 기기에는 민감한 정보를 가능한 한 적게 저장해야 합니다.
Shared Preferences를 사용할 때 어떤 제한 사항을 염두에 두어야 합니까?
Shared Preferences는 소량의 간단한 데이터를 위한 것입니다. 파일 전체가 메모리에 로드되므로 대량의 데이터는 앱을 느리게 만들 수 있으며, 메인 스레드에서 commit()으로 쓰면 사용자 인터페이스가 끊길 수 있습니다.
복잡한 객체, 관계, 쿼리에 대한 기본 지원이 없으며 데이터는 자동으로 암호화되지 않습니다. 타입 안전성도 없으므로 잘못된 키나 데이터 유형은 앱이 실행될 때에야 발견됩니다. 여러 프로세스에서 동시에 이루어진 변경도 안정적으로 처리되지 않습니다. 더 고급 요구에는 DataStore, Room, 또는 암호화된 저장소가 권장됩니다.
Shared Preferences for dummies
Shared Preferences는 앱이 전달받은 작은 정보를 기억할 수 있게 하는 모바일 앱의 영리한 기능입니다. 앱이 나중에 기억해야 할 것을 적어 두는 작은 공책이라고 생각할 수 있습니다. 예를 들어 앱을 열 때마다 사용자 이름을 입력하지 않아도 되도록 이를 기억하는 앱은 Shared Preferences를 사용하여 그 정보를 저장합니다. 이는 공간을 많이 차지하지 않으면서 다음에 앱을 사용할 때 필요한 데이터를 저장하는 쉽고 빠른 방법입니다.