티스토리 뷰

반응형

안녕하세요 :) 오늘은 UserDefaults에 대해서 배워볼게요!!

UserDefaults가 무엇이냐!!



간단하게 말해서 "데이터 저장소"라고 생각하시면 된답니다.

UserDefaults를 사용하면 앱의 어느 곳에서나 데이터를 쉽게 읽고 저장할 수 있게됩니다 :)

클래스는 float, double, integer 및 boolean과 같은 공통 유형에 액세스하기위한 메소드를 제공할 뿐만아니라,

NSData, NSString, NSNumber, NSDate, NSArray 또는 NSDictionary 유형의 객체를 저장할 수도 있어요!

(다른 객체 유형의 경우 NSKeyedArchiver를 사용하여 데이터를 저장하고 검색해야합니다.)


 UserDefaults는 사용자 기본 설정과 같은 단일 데이터 값에 적합합니다.


대량의 유사한 데이터 (테이블에 대한 레코드, 여러 사용자에 대한 데이터 등)를 저장해야하는 경우에는 sqlite 데이터베이스가 더 적합합니다.


또한, UserDefaults는 [데이터, 키(key)]으로 데이터를 저장합니다. 이때 key의 값은 String. 즉, 문자열입니다. 




간단하게 말해서

 


아이폰 환경설정 앱에 들어가보았어요. 

저 스위치 버튼이 보이시나요? 저 스위치버튼을 ON/OFF하면, 제가 나중에 따로 바꾸지 않는 이상 제가 설정한 값이 바뀌지 않죠. 심지어 설정앱을 종료해도요!

그럼 이 환경설정은 저의 스위치 데이터를 "저장"해놓은거겠죠? 

이런 간단한 저장용도로 UserDefault를 사용한답니다.


걍 만들면 되는거 아니냐 ㅡㅡ;

음..제가 스위치 버튼이 있는 앱을 하나 만들어볼까요?



자...간단하게 만들어봤는데..어떠신가요?

뒤로 갔다가 다시 들어가면 제가 해놓은 설정은 온데간데 없고, 다시 ON상태로 돌아가죠?


다시 들어가도 OFF인 상태로 어떻게 해줄까요?

네. UserDefaults. 한번 사용해봅시다!!



UserDefaults사용해보기(Switch)



1. IBOulet생성


스위치에 대한 아울렛을 생성해줘야해요 ㅎㅎ



2. IBAciton생성


또한, 액션도 생성해줘야한답니다 XD


자, 이제 뭘 해야할까요?

어떤 버튼을 클릭한다고 했을 때, 그 때 내가 실행하고싶은 행동들을 넣고 그것을 수행해주는게 IBAction이에요.

그럼 스위치는? 네. 스위치를 ON/OFF했을 때, 내가 실행하고 싶은 행동을 IBAction에 넣어주면 되겠죠?




그럼..우리는 뭘 수행하고 싶냐?

네. 데이터를 저장하고싶죠? 내가 ON -> OFF로 하고싶으면 이 OFF상태를 "저장"해야겠죠?

저장하는 행동을 UserDefaults를 사용해 넣어줘봅시다.



UserDefaults.standard.set(TestSwitch.isOn, forKey: "switchState")


저장은 "set"메소드를 통해 하게 되는데요, 우리 아까 뭐라고했죠? 


UserDefaults는 [데이터, 키(key)]으로 데이터를 저장합니다. 이때 key의 값은 String. 즉, 문자열입니다. 


라고 그랬죠? 

데이터. 여기서 데이터는 "이 스위치가 켜져있느냐, 꺼져있느냐"겠죠? 

스위치의 isOn메소드는 Bool형이에요.

켜져있으면 true, 꺼져있으면 false를 반환하겠죠. 



우리는 지금 ON인 상태에서 OFF상태를 만든다고 생각해보자구요.

그럼 false값이 들어가있겠고, 이 "상태"를 어떤 key값을 통해 저장하는 거에요.


지금은 스위치가 하나지만, 스위치가 여러개인상태, 

즉 UserDefaults로 여러개의 데이터를 저장해야할 때를 위해 이 key값이 있는 것 같아요.

여러분이 하고싶은 문자열로 저장해주세요 XD






자.. 한번 실행해볼까요? 

앗..여전히 스위치가 제가 설정한대로 가만있지 않네요..

왜그런걸까요?




네. 우리는 "저장"만했지, 설정해주는 작업을 하지않았죠? 

너의 현재 "상태"는 이거야!하고 스위치에게 말해주는 작업이요.


그것을 해봅시다.




자..근데.. 언제말해줘야할까요?

저, 스위치가 있는 "View"가 나타날 때, 또는 나타나기전에 

스위치야 너 상태는 이거야 하고 말해줘야겠죠?

혹시 뷰의 생명주기 기억하시나요? :)


기억이 안나신다면..!

여기에 가셔서 읽고오시는 것을 추천드려요 XD





네! viewDidLoad()나, viewWillAppear()에 해주면 되겠죠?

저는 viewDidLoad()에 해줘볼게요.



3. viewDidLoad()에 스위치의 값을 설정해주자.


TestSwitch.isOnUserDefaults.standard.bool(forKey: "switchState")


자. 코드를 살펴볼까요? 현재 지금 스위치의 상태를 지정해줘야하니, isOn메소드를 부른거겠죠?

 여기에 true값을 넣으면 스위치가 켜질것이고, false값이 들어가면 꺼질거에요. 

우리는 방금 false값을 저장했죠? 

그래서 우리가 아까 저장한 값을 불러오기 위해 UserDefaults를 써줍니다. 

그리고..bool이 나왔는데 왜 bool이냐?



isOn메소드가  bool타입이기 때문이죠. 만약 float값이면(슬라이더의 경우) .float을 해준답니다.

그리고, 아까 우리가 데이터와 함께저장한 key있죠? 그 데이터를 불러오는거죠.

음...물품보관소에서 우리에게 어떤 key를 준다고 생각해볼게요. 물품보관소에는 다양한 사람들이 물건을 맡기겠죠? 하지만, 그들이 물건을 찾을 땐, 그 물건의 주인만 찾을 수 있어야겠죠. 

그래서 key를 주면서 "이 key가 맞는 상자에 있는 데이터를 줘!"라고 하는거죠. 

상자는 이해를 돕기위해 그냥 한 말이고..ㅎㅎ 조금 이해가 가시나요? 왜 key가 필요한지?



우리는 아까 switchState라는 key로 데이터를 저장했으니, 역시 불러올때도 switchState로 불러줘야겠죠.








자.. 실행해볼까요?

두근두근




핳ㅎㅎ 어떠신가요!!

이제 저장이 되죠?

XD

전체 소스코드는 밑에 첨부해둘게요ㅎㅎ

그리고, 제가 UserDefaults.standard이렇게 계속 썼는데, 이렇게 매번 쓰기 귀찮다!!

하시는 분들은 

let myUserDefaults = UserDefaults.standard


이렇게 따로 변수를 지정하셔도 된답니다.





도움이 되었으면 좋겠어요!



반응형