ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SwiftUI] 데이터 캐싱 기법들에 대하여
    SwiftUI 2024. 2. 5. 16:04
    728x90

     

    캐싱이란?

    캐싱은 데이터를 내부에 미리 저장하고 필요할 때 빠르게 접근하는 기술이다. 이 기술은 반복적인 계산 또는 불필요한 데이터 요청을 줄여 성능을 향상시키는데 도움이 된다.

     


     

    캐싱의 장점!

    1. 성능 향상 : 캐싱된 데이터는 디스크나 네트워크에서 불러오는 것보다 훨씬 빠르게 접근할 수 있다. 앱의 응답 시간을 개선하고, 사용자 경험을 향상시킨다.
    2. 네트워크 트래픽 절약 : API 응답을 캐싱하면 동일한 요청을 반복해서 보낼 필요가 없다. 이는 네트워크 대역폭을 절약하고, 데이터 사용량을 줄여준다.
    3. 오프라인 접근 : 캐싱된 데이터는 네트워크 연결이 없어도 접근할 수 있다.이는 오프라인 상태에서도 앱이 작동하도록 해준다.

     

    캐싱을 사용하는 도구들.zip

    UserDefaults

    사용자의 설정값이나 간단한 정보를 저장하고 불러올 때 사용한다.

    let defaults = UserDefaults.standard
    defaults.set(25, forKey: "Age")
    let age = defaults.integer(forKey: "Age")

     

    Core Data

    앱의 복잡한 데이터 모델을 저장하고 관리한다.

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext
    let entity = NSEntityDescription.entity(forEntityName: "Person", in: context)
    let newPerson = NSManagedObject(entity: entity!, insertInto: context)
    newPerson.setValue("John", forKey: "name")
    do {
       try context.save()
    } catch {
       print("Failed saving")
    }

     

    URLCache

    URL 세션을 통해 수행되는 네트워크 요청의 응답을 캐싱한다.

    let urlRequest = URLRequest(url: URL(string: "http://example.com")!)
    let data = try? Data(contentsOf: urlRequest.url!)
    URLCache.shared.storeCachedResponse(CachedURLResponse(response: urlRequest, data: data!), for: urlRequest)

     

    NSCache

    임의의 키-값 쌍을 메모리에 캐싱한다.

    let cache = NSCache<NSString, UIImage>()
    let image = UIImage(named: "example")!
    cache.setObject(image, forKey: "example")

     

    Disk Storage

    앱의 데이터를 디스크에 직접 저장하는 것도 하나의 방법이다.

    let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
    let url = URL(fileURLWithPath: path).appendingPathComponent("example")
    let data = "example data".data(using: .utf8)!
    try? data.write(to: url)

     


    기본적인 사용 방법들에 대해서 알아본 후, 직접 프로젝트에 반영한 후기와 구체적인 사용 방법에 대해서는 추후 업로드하기로!!

     

    오늘의 코드 레시피👩🏻‍🍳 완료!🩷

    728x90
예콩이의 코드 레시피