본문 바로가기

TechLog

WP 앱 설정 저장하기

보통 WP 앱을 작성하면서 저장소에 저장해야 할 내용이 있을 때는 Application 클래스의 State 프로퍼티나 IsolatedStorage를 사용하지만, WP 앱의 설정과 같은 데이터를 저장하려 한다면 좀 더 간편한 방법이 있다. 다음 코드를 보자:

 

IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings;
if (appSettings.Contains("UserSettings"))
    _userSettings = appSettings["UserSettings"] as UserSettings;
else
    _userSettings = new UserSettings() {
        FontFamilyName = "Segoe WP",
        FontSize = 24.0
    };
appSettings["UserSettings"] = _userSettings;
appSettings.Save();

 

IsolatedStorageSettings 클래스는 System.IO.IsolatedStorage 네임스페이스에 포함되어 있으며, IDictionary<string, object> 타입을 상속하고 있다. IsolatedStorageSettings 클래스의 ApplicationSettings 프로퍼티를 통해서 현재 프로그램에서 사용자 설정을 저장하는데 사용하는 IsolatedStorageSettings 타입의 인스턴스를 얻을 수 있다. 그리고 그 인스턴스를 appSettings 변수에 할당한다.

appSettings 변수는 사용자 설정 정보를 저장할 수 있는 컬렉션인 동시에, 격리된 저장소에 사용자 설정 정보를 직렬화하여 파일 형태로 저장하는 기능을 제공한다. 이 컬렉션에 ‘UserSettings’라는 키를 사용해서 UserSettings 타입 객체를 저장하고 불러오도록 구현한다.

appSettings 변수 컬렉션 내에 ‘UserSettings’ 키가 있다면, ‘UserSettings’ 키에 해당하는 객체를 얻은 다음 UserSettings 타입으로 캐스팅해서 _userSettings 변수에 할당한다. 만약 appSettings 변수 컬렉션 내에 ‘UserSettings’ 키가 없다면, 프로그램이 처음 실행되어 사용자 설정 정보가 존재하지 않는다는 의미이므로 UserSettings 객체를 새로 생성하여 _userSettings 변수에 할당한다.

사실, IsolatedStorageSettings 클래스는 격리된 저장소에 대한 일종의 래퍼 역할을 한다. IsolatedStorageSettings 클래스의 ApplicationSettings 프로퍼티를 통해서 IsolatedStorageSettings 타입 객체를 얻을 때, WP7에서는 내부적으로 격리된 저장소(물론 현재 실행중인 프로그램에 할당된)의 루트 경로에 있는 ‘__ApplicationSettings’ 파일을 열고 파일의 내용을 역직렬화하여 IsolatedStorageSettings 타입 객체를 생성한다. IsolatedStorageSettings 타입은 IDictionary<string, object> 타입을 상속한 것이기 때문에, 컬렉션 내부에 저장되어 있던 객체들도 함께 역직렬화된다. 다시 말해, IsolatedStorageSettings 클래스를 사용하는 대신 IDictionary<string, object> 타입 객체를 격리된 저장소에 저장/복원하는 방법을 사용해도 동일한 결과를 얻을 수 있으며, 코드가 약간 복잡해질 뿐이다.

마지막의 Save 메서드는 이렇게 만들어진 객체의 내용을 실제로 격리된 저장소에 물리적으로 저장한다.