[iOS/Swift] UserDefaults

민니·2022년 7월 1일
0

iOS

목록 보기
7/22

UserDefaults ❓

  • 데이터를 key-value 쌍으로 데이터베이스에 영구적으로 저장하는 인터페이스
  • 예를 들어 메모장 앱을 만들었을 때, 앱을 종료해도 메모들이 남아 있어야겠지 🤔 이럴 때 사용하는 것!


Data Save & Load & Remove

Save - 저장하기

UserDefaults.standard.set(Any?, for key: String)

📚 Any?: 저장하고 싶은 값
📚 for key: 저장한 값을 부를 key name

(저장하고 싶은 값에는 다양한 type의 파라미터가 들어갈 수 있음)


Load - 불러오기

UserDefaults.standard.value(for key: String)

📚 for key: 저장할 때 지정해 주었던 key name을 적어 준다

(불러올 데이터의 타입에 따라 메서드 이용)


Remove - 삭제하기

UserDefaults.standard.removeObject(for key: String)

📚 for key: 마찬가지로 저장할 때 지정해 주었던 key name을 적어 준다



구현하기

Background

무음 모드를 관리하는 앱이 있다고 가정해 보자. (실제로 무음 기능을 추가하진 않았지만,, ^^)
switch 버튼 On - 무음 모드 켜짐
switch 버튼 Off - 무음 모드 꺼짐
당연히 앱이 종료되었다 켜져도 무음 모드였다면 무음 모드가 유지되어야 하고, 소리 모드였다면 소리 모드가 유지되어야 함.
UserDefaults를 사용하지 않으면, 데이터가 유지되지 않음!


Outlet, Action 추가

📚 switchButton: 스위치 버튼의 outlet 변수
📚 tapSwitchButton: 스위치 버튼을 tap했을 때의 Action


Data Save

나는 함수로 구현해 보았다!
📚 저장한 데이터: switchButton.isOn을 저장하였음. (Bool 타입이므로 on일 때는 true, off일 때는 false를 반환할 것)
📚 key 이름은 "switch"로 지정해 주었다.

잘 생각해 보면 🤔 데이터가 변경될 때마다 값을 저장해 주어야 함을 알 수 있음.
따라서 tapSwitchButton Action 안에 함수를 호출해 준다.
switch가 on/off 될 때마다 값이 저장되도록!
(물론 함수로 구현하지 않아도 됨)


Data Load

2개의 방식으로 구현해 보았다.

📚 func bool(forKey: String) -> Bool
Bool 타입으로 값을 불러와 switchButton.isOn에 저장하였다.

📚 func object(forKey: String) -> Any?
Any? 타입으로 값을 불러와 switchButton.isOn에 저장하기 위해 Bool 타입으로 타입 캐스팅해 주었음.
Any? 때문에 옵셔널 바인딩이 필요하다.

viewDidLoad()가 일어날 때마다 값을 새로 불러와야 하므로, viewDidLoad()에 호출해 주기




마무리

UserDefaults 이름을 처음 들었을 땐 너무... 있어 보이게 생겨서 어려울 것 같았는데 개념 자체는 괜찮았다.
그치만... ㅜ
일기장 앱을 만들고 있는데, 특히 구조체 배열을 저장하고 불러올 때 map하고 compactMap하는 부분이 많이 헷갈려서 삽질을 했다...
클로저가 아직 많이 미숙했던 것을 느낌 🥲





출처)
https://developer.apple.com/documentation/foundation/userdefaults/

0개의 댓글