본문 바로가기
IOS App Programming/IOS 연습

[IOS] UserDefaults란?

by B_Tori 2023. 4. 12.

UserDefaults란?

  • 앱 실행 시 지속적으로 키-값 쌍을 저장하는 사용자의 기본 데이터베이스에 대한 인터페이스이다.
  • 런타임 환경에서 동작하면서, 앱이 실행되는 동안 default database에 접근해 데이터를 기록하고 가져오는 역할을 한다.
  • 싱글톤 패턴으로 설계되어 앱 전체에서 단 하나의 인스턴스만 존재함

데이터 저장

  • open func set(_ value: Any?, forKey defaultName: String) 함수를 사용한다.
  • set함수에는 String, Double, Int 등 value 매개변수에 다양한 타입이 있지만, 데이터를 저장할 때에는 저장 가능한 타입 형식이라면 어떤 값을 입력해도 오류가 발생하지 않는다.
  • Int, Float, Double, Bool, URL? 같은 공통 유형에 접근할 수 있는 메서드를 제공한다.
    또한, NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary 유형의 객체를 저장할 수도 있다.
    위의 타입이 아닌 사용자 정의 객체는 NSKeyedArchiver, Codable을 이용해 Data 형태로 아카이빙해서 저장해야 한다.

UserDefaults.standard

UserDefaults는 싱글톤 패턴으로 설계되어 있으며, 개발자는 standard 프로퍼티를 통해 전역 인스턴스를 반환받아서 사용할 수 있다.

따라서 set함수를 사용한다라고 하면 UserDefaults.standard.set() 등과 같이 사용한다.

이때 매번 UserDefaults.standard를 작성해야 하는 번거로움을 덜기 위해 이 인스턴스를 상수에 담아 사용할 수 있다.

ex) let userDefaults = UserDefaults.standard 와 같이 상수로 지정하면 userDefaults.set()처럼 사용할 수 있게됨

 

 

데이터 가져오기

데이터를 저장할 때와는 다르게 가져올 데이터 타입을 명확하게 해야 한다.

ex) 문자열타입의 데이터를 가져오기 : UserDefaults.standard.string(forKey:"string 값 키")

반환타입은 옵셔널 타입인 이유는 올바르지 않은 키 값에 접근했을 때 nil값이 반환되기 때문이다.

따라서 데이터를 불러 올 때 저장한 값의 타입으로 캐스팅을 해야 정상적으로 값에 접근할 수 있다.

데이터 삭제하기

removeObject() 메서드에 삭제를 원하는 데이터 Key값을 입력하여 데이터를 삭제할 수 있다.

 

key값 열거형으로 저장하기

UserDefaults의 Key값은 문자열로 되어 있어서, 오타가 발생할 경우 데이터를 잘못 저장하거나 가져오지 못하는 문제가 발생한다.

이런 문제를 방지하기 위해 사용할 Key값을 미리 열거형으로 구현하여 사용하면 오타로 인한 실수를 방지할 수 있다.

enum UserDefaultsKey: String {
    case firstKey
    case secondKey
    case thirdKey
}


UserDefaults.standard.set("저장할 데이터", forKey: UserDefaultsKey.firstKey.rawValue)

//모든 키 userDefaults값 초기화
UserDefaultsKey.allCases.forEach { UserDefaults.standard.removeObject(forKey: $0.rawValue) }

 

댓글