[iOS] UserDefaults 사용하기

nnnyeong·2021년 7월 24일
0

iOS

목록 보기
2/17

2-3달 전 근무중 앱을 개발하면서 처음으로 UserDefaults를 사용해보았다
사진 데이터와 관련 정보를 디바이스에 저장하고 불러오는 작업이 필요했는데 서버가 없이 개발할 때였기에 UserDefaults 를 사용했었다!

지금보면 간단한데 그 때는 왜그런거지? 집중력을 몇주동안 잃어버렸나..ㅋㅋㅋ 민망할정도네 이거~ 껄껄~

오늘은 iOS 앱과 관련된 간단한 정보를 디바이스에 영구적으로 저장하는 인터페이스인 UserDefaults에 대해 공부해보자!




UserDefaults 란

공식문서에서 UserDefaults는 어떻게 정의되어 있는가!?

음, 일단 기본적으로 제공되는 DB를 사용할 수 있는 인터페이스 라는거고, key-value 쌍으로 유지 된다는거구만!

앱에서 사용되거나 필요한 데이터를 영구적으로 보관하기 위한 방법으로는 네트워크 서버 이용, CoreData, UserDefaults 등이 있다.

이 중 UserDefaults 는 런타임 환경에서 동작하면서, 앱이 실행되는 동안 기본 저장소 (default database)에 접근해 데이터를 기록하고, 가져오는 역할을 하는 인터페이스이다.

이처럼 데이터를 저장하고 기록하는 UserDefaults객체가 여러개 인스턴스화 될 수 있다면 어떨까? 자연스레 따라오는 데이터 동기화 문제부터 벌써부터 골치아픈 문제들이 떠오른다. 애초에 방대한 양의 데이터나 민감한 정보를 저장하는 용도가 아니기에 UserDefaults는 싱글톤 패턴으로 설계되어 앱 전체에서 단 하나의 인스턴스만 존재한다!

UserDefaults는 float, double, integer, boolean 과 같은 공통 유형에 액세스하기위한 메소드를 제공할 뿐만아니라 NSData, NSString, NSNumber, NSDate, NSArray 또는 NSDictionary 유형의 객체를 저장할 수도 있다.

다른 유형의 객체일 경우 NSKeyedArchiver 를 사용해서 데이터를 저장하고 검색하여야 한다.

정리하면,

  • 앱의 기본 데이터베이스에 영구적으로 데이터를 저장할 수 있는 인터페이스
  • key - value 쌍으로 저장
  • Singleton 객체, 앱 전체에서 하나의 인스턴스로 사용
  • float, double, NSData, NSString 등의 데이터 타입 저장, 불러오기



데이터 저장과 불러오기

UserDefaults에 데이터를 저장할 땐 open func set(_ value: Any?, forKey defaultName: String) 함수를 사용한다. 말했듯 UserDefaults는 싱글톤 객체이기 때문에 UserDefaults.set(210724, forKey: "key") 와 같이 사용한다

저장된 데이터를 불러올 때엔

string, array, dictionary 등 저장된 데이터의 형식에 맞추어 함수를 사용하고 함께 저장된 key 값으로 데이터를 찾을 수 있다

허브가 없어서 기기 연결을 하지 못해서 직접 테스트를 해보진 못했지만ㅜ, 간단하게 코드를 적어보면

UserDefaults.standard.setValue(2021, forKey: "year")
UserDefaults.standard.setValue(7, forKey: "month")
UserDefaults.standard.setValue("코로나", forKey: "stopPlease")
        
let year = UserDefaults.standard.integer(forKey: "year")
let month = UserDefaults.standard.integer(forKey: "month")
let f__k = UserDefaults.standard.string(forKey: "stopPlease")
        
print("\(year)\(month)월 빡치는건 \(f__k) ^^")

와 같이 사용할 수 있다!




주문한 허브가 오면 보다 자세한 내용을 실제적인 테스트와 함께 보충해야지!




참고 포스팅 1
참고 포스팅 2
참고 포스팅 3

profile
주니어 개발자까지 ☄️☄️

0개의 댓글