티스토리 뷰

반응형

안녕하세요! Ick입니다.

 

이번 글에서는 제가 앱 개발을 할 때 사용하면 정말 좋다고 느낀 UserDefaults라는 것에 대해 알아보려고 합니다. UserDefaults가 무엇인가요? 하고 물으신다면 간단하게 말하자면 "사용자의 정보를 저장하는 것"이라고 말할 수 있습니다. 예를 들어 사용자가 어떤 언어로 이 앱을 쓰고 싶은지에 대한 정보라던가 흔히들 보는 팝업창을 오늘은 그만 보기 같은 기능을 구현할 수 있도록 정보를 저장하는 것이죠!

 

우선 공식 문서는 여기 입니다.

 

UserDefaults는 아까 말했듯 앱의 사용자의 정보를 Key-Value 쌍으로 계속 저장합니다. 이렇게 정보를 저장하여 앱에서 사용자 기본 설정들을 설정할 수 있습니다. 이 값은 앱의 프로세스 내에서 동기적으로 변경되며 영구 저장소에 비동기적으로 변경된다고 합니다. UserDefauls값은 로컬에 저장되며 이로 인해 앱 사용자마다 서로 다른 설정을 가질 수 있게 되는 것이죠!

 

UserDefaults에는 float, double, int, bool, URL과 같은 일반적인 타입을 저장할 수 있으며 컬렉션 타입들도 저장할 수 있습니다. 이러한 값들에 옵저버를 만들어서 초기화되는지도 확인할 수 있습니다. 또한 UserDefaults 클래스는 thread safety(스레드 안정성)을 보장합니다.

 

이제 UserDefaults를 직접 사용해보며 어떤 역할을 하는지 알아보겠습니다.

우선 간단하게 아래와 같이 뷰를 하나 만들게요.

스위치를 On 시키면 재생속도가 1.5로 증가하도록 만들었습니다. 하지만 스위치를 On으로 해두고 뷰를 내리고 다시 띄우면 Off로 켜지는 것을 볼 수 있습니다. 물론... 저장공간 하나를 만들어서 스위치의 상태를 저장한다면 뷰를 다시 띄울 때도 적용이 되겠지만 아예 앱을 껐다 켠다면 스위치는 다시 off로 되어있을 거예요. 이렇게 앱을 껐다 켜도 사용자 설정을 유지하기 위해 UserDefaults를 사용할 수 있습니다.

 

먼저 스위치와 레이블을 IBOutlet으로 연결하고 액션을 추가하겠습니다.

위와 같이 IBOutlet으로 연결하고 스위치에는 value change, 즉 값이 바뀔 때마다 이벤트를 만들기 위해 액션도 하나 적용했습니다. 스위치의 값이 변할 때마다 UserDefaults에서 스위치의 on/off 여부를 기록하는 것을 수정해주면 될 것 같습니다.

 

위와 같이 스위치의 액션에 코드를 추가해줍니다. UserDefaults에 값을 설정할 때는 set() 메서드를 사용하면 되는데요, set() 메서드의 forKey 매개변수는 이 값을 구분할 Key값입니다. 즉 아까 UserDefaults값은 키-값 쌍으로 저장된다고 했었는데요, 이는 곧 딕셔너리 타입처럼 저장된다는 말입니다. 그런데 이때 Key값으로는 String을 받습니다.

 

저는 스위치의 상태를 저장하기 위해 "switchState"라는 이름을 사용해줬습니다. 이는 마음대로 설정해도 됩니다! 그리고 label값도 저장된 UserDefaults값으로 수정해주는 조건문을 만들어주시면 됩니다.

 

이제 viewDidLoad()로 돌아가서 뷰가 생겼을 때 스위치와 레이블의 상태만 지정해주면 됩니다.

위와 같이 뷰가 만들어질 때 스위치와 레이블의 상태를 아까 저장한 UserDefaults 값으로 설정해주시면 끝납니다! 그럼 이제 실행해보겠습니다.

위와 같이 뷰를 껐다 켜도 스위치와 레이블의 상태가 유지되는 것을 볼 수 있습니다. 심지어 앱을 종료해도 UserDefaults는 로컬에 저장된 정보이기 때문에 다시 앱을 실행했을 때 유지됩니다.

 

이렇게 간단하지만 유용한 UserDefaults 사용법에 대해 알아봤습니다.

 

감사합니다!

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함