iOS - UserDefaults

이한솔·2023년 9월 12일
0

iOS 앱개발 🍏

목록 보기
17/49

UserDefaults

앱에서 사용되거나 필요한 데이터를 영구적으로 보관하는 방법에는 네트워크 서버 이용, CoreData, UserDefaults 등이 있다.
UserDefaults 는 런타임 환경에서 동작하면서 앱이 실행되는 동안 기본 저장소에 접근해 데이터를 기록하고, 검색하기 위한 인터페이스를 제공하는 iOS 및 macOS 프레임워크에서 제공하는 클래스다.

💡 런타임이란?
프로그램 실행되고있는 시점

UserDefaults는 많은 양의 데이터나 민감한 정보를 저장하는 용도가 아니고
싱글톤 패턴으로 설계되어 앱 전체에서 단 하나의 인스턴스만 존재하며
키-값 저장소로 사용되어 사용자 설정, 앱 구성 및 기타 간단한 데이터를 저장하는 데 유용하다.

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



UserDefaults의 저장 방식 및 장점

UserDefaults는 plist에 XML 형태로 데이터가 저장되기 때문에 데이터 크기가 커지면 파일 크기가 커져서 앱이 실행될때 저장된 데이터를 모두 메모리에 올리기 때문에 메모리 성능에 악영향을 줄 수 있다.
대신 데이터를 Read / Write 할 때 다시 메모리에 접근하지 않아도 되서 소규모 데이터 저장에 사용 시 속도도 빠르고 메모리에 부담되지않게 기능을 구현할 수 있으므로 소규모 데이터를 저장하는데 적합하다.

UserDefaults의 장점은 Thread-Safe 하다는 것이다.
CoreData와 Realm은 Thread-Safe 하지 않기 때문에 멀티 스레드 환경에서 주의를 해야하지만, UserDefaults는 Thread-Safe 하기 때문에 별도의 처리가 필요 없다.
대신, plist에 데이터가 저장되기 때문에 앱이 삭제되면 데이터도 모두 삭제된다.
또한, 암호화해서 저장하지 않기 때문에 보안이 좋지 않다.



데이터 저장하기

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

UserDefaults.standard.set(switch.isOn, forKey: "switchState")


데이터 불러오기

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

switch.isOn = UserDefaults.standard.bool(forKey: "switchState")


데이터 삭제하기

데이터를 삭제할 때는 UserDefaults.removeObject(forkey: "key") 메소드를 사용한다.

UserDefaults.standard.removeObject(forKey: "switchState")

0개의 댓글