티스토리 뷰

오늘은 UserDefaults에 대해 알아보겠습니당.

 

UserDefaults

 

1. 데이터를 저장하는 방법 중 하나

UserDefaults는 데이터를 저장하는 방법 중 하나라고 생각하면 될 것 같아요.

그렇다고 데이터베이스는 아니구요. 말 그대로 유저의 기본값? 같은 기능인거죠.

 

 

예를 들어, 최고 점수나 볼륨, 뮤직 on/off 등?

음악 앱을 이용할 때, 지난 번 볼륨이 유지되어 있쟈나여? 갑자기 볼륨 커지면 다들 핸드펀 떨구잖아여?!! 그런 기본값들을 저장해두고, 불러와서 사용하는 것이져.

 

 

2. 저장 형태

UserDefaults는 키-값의 쌍으로 저장이 되구요, swift의 기본타입(float, double, integer, bool, URLs)으로 접근할 수 있다구 해요.

3. 작은 데이터만 저장

키-값의 쌍으로 저장이 될 뿐만 아니라, 앱 실행 시 모든 list가 로드 되기 때문에 무거운 데이터를 저장하기에 적정한 장소가 아닌거져.

 


싱글톤

UserDefaults는 싱글톤 객체를 이용해서 접근할 수 있는데요.

싱글톤 객체는 단순하게 말하면 유일하게 존재하는 객체에요.

클래스에서 상속이다 뭐다 하면 객체가 여러개 생기고, 그 값이 변경되는 일이 많져.

그런데 이렇게 싱글톤 객체로 만들어서 사용하면 오로지 그 객체만 이용해서 접근할 수 있기 때문에, 문제가 생기기 적답니다.

(다음편에 싱글톤 다뤄봐야지,,,나도 공부해야지,,,)

 

 

만약 게임 앱에서 최고 점수를 UserDefaults로 저장하고자 하는데, 그 객체가 여러개 생겨서 여기저기서 바꾸면 굉장히 곤란하겠져? 그래서 싱글톤을 사용하는 것 같아요.

 


코드로 한 번 보는 게 낫겠져?

import UIKit

let defaults = UserDefaults.standard // 싱글톤 객체

 

우선 defaults라는 객체를 하나 만들어서 계속 사용하게 될 UserDefaults.standard를 할당해 줄게요.

이제 이 defaults에 값을 셋팅해주면 됩니당.

 

 

키 값은 전부 String 타입이네요! 잊지말기!!

 

 

위에서 말한 것처럼 string, int, float, bool 등 다양한 값으로 셋팅할 수 있게 해놨네용?

볼륨 값이라고 생각하고 셋팅해볼까요?

defaults.set(7.24, forKey: "Volume")

 

 

UserDefaults는 키-값의 쌍이라고 했죠? Volume이라는 key(키)에 7.24라는 value(값)이 저장된 거에요.

그럼 이 값을 어떻게 가져올까요?

 

 

다양한 메서드들이 있는데요. float 값이니까! 이 놈을 이용해볼게요.

func float(forKey defaultName: String) -> Float

 

 

volume이라는 상수에 할당한 후, 프린트를 해보면 우리가 위에서 셋팅한 값이 나온답니다.

let volume = defaults.float(forKey: "Volume") 
print(volume)//7.24

음악 on/off 여부를 저장해볼까요?

defaults.set(true, forKey: "MusicOn")
let musicOn = defaults.bool(forKey: "MusicOn") 
print(musicOn) //true

 

 

set메서드는 Any타입도 받기 때문에 Dictionary, Set 등과 같은 타입들도 값을 셋팅할 수 있다리!!

 

let dictionaryKey = "player"
let dictionary = ["score": "3"]

defaults.set(dictionary, forKey: dictionaryKey)
let player = defaults.dictionary(forKey: dictionaryKey)

print(player) //Optional(["score": 3])

그러나 값을 읽어올 때는 리턴 타입이 옵셔널이기 때문에 바인딩해서 사용해줘야겠쥬?!

주의하기!!

 


이렇게 UserDefaults를 간단하게 알아봤는디유!

데이터를 저장할 수 있는 방법이지만, 작은 데이터를 저장하기에 적합하다는 것!

값은 set으로 저장하고, 값은 타입명과 유사한 메서드로 얻어온다는 것!!

 

 

혹시 틀린 게 있다면, 알려주십셔!!

슨배님덜!!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크