iOS & swift

UserDefaults를 사용하여 Login Cache 저장하기

ggasoon2 2023. 2. 26. 17:14

 

UserDefaults를 사용하여 로그인 cache 정보를 저장하는 방법입니다.

 

UserDefaults는 Local Database로

Login credentials, tokens 등과 같은 소량의 데이터를 저장하기 위해 사용됩니다.

 

Local DB를 저장하는 방식으로는 CoreData도 존재합니다.

CoreData와 Userdefaults의 차이점으로는

CoreData는 여러 속성과 개체간의 관계를 가진 복잡한 데이터 모델을 저장하도록 설계되어있습니다.

 

CoreData와 차이점

  1. Userdefaults는 간단한 string값을 저장하는 반면, CoreData에는 array, dictionary를 저장 할 수 있습니다.
  2. Userdefaults는 thread - safe이며 멀티 스레드에 별다른 문제 없이 접근해도 됩니다. 하지만 동시에 데이터에 액세스 할 경우 성능 문제가 발생할 수 있습니다. 이러한 경우 동시 액세스를 처리하도록 설계된 CoreData 사용 권장.
  3. Userdefaults는 데이터가 암호화되지 않아 사용자가 쉽게 읽거나 수정가능하다. 반면 CoreData 데이터는 기본적으로 암호화된 SQlite db에 저장되므로 보안이 강화됨.

등의 차이가 있습니다.

 

다시 본론으로 돌아가서 UserDefaults의

저장 형식은 key - value 형태로 저장되며,

 

value를 key에 set하는 method와

key로 value를 get하는 method가 존재합니다.

 

 

1. set

UserDefaults.standard.set(token, forKey: "key123")

key값 key123에 token 값을 저장하는 set method 입니다.

 

 

2. get

UserDefaults.standard.object(forKey: "key123")

 

key123의 key값에 해당하는 value값을 가져오는 방법입니다.

 

 

 

추가적으로 싱글톤으로 만들어

import Foundation

struct LoginUserHashCache {
    static let shared = LoginUserHashCache()
    private init () {}
    static var loginKey = "UserHash"
    
    func check() -> String? {
        if let userHash = UserDefaults.standard.object(forKey: loginKey) as? String {
            return userHash
        }
        return nil
    }
    
    func store(value: String){
        UserDefaults.standard.set(value, forKey: loginKey)
    }
    
    func logout(){
        UserDefaults.standard.removeObject(forKey: loginKey)
    }
}

 

LoginUserHashCache.shared.check()

LoginUserHashCache.shared.store(value: "value123")

LoginUserHashCache.shared.logout()

 

이런식으로도 사용하면 좀더 깔끔할수도 있지않나 싶습니다.

 

혹시 쓴글이 잘못됐거나 더 나은 방법이 있다면 알려주시면 감사드리겠습니다.

 

읽어주셔서 감사합니다~