[ swift - UserDefaults ]

Yr Yr·2024년 1월 9일

TIL

목록 보기
29/39

UserDefaults란?

  • 앱을 실행하는 동안 지속적으로 키-값 쌍을 저장하는 사용자의 기본 데이터베이스에 대한 인터페이스.

UserDefaults의 저장위치

  • 앱이 실행될 때 데이터를 저장할 수 있는 기본 데이터베이스가 생성된다. 기본 데이터베이스는 property list를 기반으로 하며, .plist파일에 xml형식으로 데이터가 저장된다. 앱을 종료해도 데이터가 유지되며 앱을 삭제한 경우에만 저장한 데이터가 삭제된다. 대용량의 데이터보다 단일 데이터를 저장하는 데 쓰인다.

사용법

[ UserDefaults.standard ]

  • 싱글톤 인스턴스로 공유된 기본값 객체를 반환하는 함수
    let defaults = UserDefaults.standard

[ 데이터 저장 ]

  • 저장 시 set 메서드 사용
    defaults.set("value", forKey: "key")

[ 데이터 가져오기 ]

  • 저장한 데이터를 불러올 땐 타입에 맞게 가져와야 한다.
  • 타입캐스팅을 해주거나 타입에 맞는 메서드를 사용한다.
let data1 = defaults.object(forKey: "key) as! String
let data2 = defaults.string(forKey: "key")

[ 사용자 정의 타입 저장하는 법 ]

--> UserDefaults는 Base 64 인코딩 형식의 Data형을 따르기 때문에 저장할 수 있는 데이터는 Base 64 인코딩 형식을 거쳐야 한다(* Base 64 인코딩: Binary Data를 Character set에 영향을 받지 않는 공통 ASCII 영역의 문자로만 이루어진 문자열로 바꾸는 인코딩).
기본 데이터 타입은 내부적으로 해당 인코딩 형식이 적용되지만, class나 struct 같은 사용자 정의 타입은 직접 변환해서 저장해야 한다.

  • JSONEncoder/Decoder 사용하기
    1) struct에 Codable 채택
    struct Todo: Codable { }

    2) 데이터를 넣고 JSONEncoder를 사용하여 데이터를 저장

    var todos = [Todo]()
    
    let encoder = JSONEncoder()
          if let encodeData = try? encoder.encode(todos) {
             UserDefaults.standard.set(encodeData, forKey: "todos")
          }

    3) 데이터를 불러올 땐 JSONDecoder를 사용

    if let readData = UserDefaults.standard.data(forKey: "todos"),
             let decodeData = try? JSONDecoder().decode([Todo].self, from: readData) {
             todos = decodeData
          }

0개의 댓글