[swift] Swift ObjectMapper를 사용하여 앱의 데이터 캐싱 방법은?

앱 개발에서 데이터를 캐싱하는 것은 성능을 향상시키고 네트워크 사용을 줄일 수 있는 중요한 요소입니다. Swift 언어에서는 Swift ObjectMapper 라이브러리를 사용하여 데이터 캐싱을 간편하게 구현할 수 있습니다.

Swift ObjectMapper는 JSON 데이터를 Swift 객체로 매핑해주는 기능을 제공합니다. 이를 활용하여 네트워크로부터 받은 JSON 데이터를 객체로 변환하고, 이를 로컬 캐시에 저장하여 캐싱 기능을 구현할 수 있습니다.

먼저, ObjectMapper 라이브러리를 설치해야 합니다. Swift Package Manager 또는 CocoaPods를 통해 설치할 수 있습니다.

import ObjectMapper

class DataManager {
    static let shared = DataManager()
    
    private init() {}
    
    func cacheData<T: Mappable>(_ data: T, forKey key: String) {
        let JSONString = data.toJSONString()
        UserDefaults.standard.set(JSONString, forKey: key)
    }
    
    func retrieveCachedData<T: Mappable>(forKey key: String) -> T? {
        if let JSONString = UserDefaults.standard.string(forKey: key),
           let object = Mapper<T>().map(JSONString: JSONString) {
            return object
        }
        return nil
    }
}

위의 코드는 DataManager라는 싱글톤 객체를 생성하여 데이터 캐싱 기능을 관리합니다. cacheData 함수는 Swift 객체를 JSON 문자열로 변환한 후 UserDefaults에 저장합니다. retrieveCachedData 함수는 저장된 JSON 문자열을 객체로 변환하여 반환합니다.

이제 객체를 캐싱하고 사용하는 예제를 살펴보겠습니다.

class User: Mappable {
    var name: String?
    var age: Int?
    
    required init?(map: Map) {
    }
    
    func mapping(map: Map) {
        name <- map["name"]
        age <- map["age"]
    }
}

let user = User()
user.name = "John"
user.age = 30

DataManager.shared.cacheData(user, forKey: "cachedUser")

if let cachedUser: User = DataManager.shared.retrieveCachedData(forKey: "cachedUser") {
    // 캐시된 User 객체 사용
    print(cachedUser.name ?? "")
    print(cachedUser.age ?? 0)
}

위의 예제에서는 User 클래스를 정의하고, ObjectMapper를 사용하여 JSON 데이터와 객체 간의 매핑을 구현합니다. User 객체를 생성하고 DataManager를 통해 캐싱하고, 다시 DataManager를 통해 캐시된 객체를 사용합니다.

이제는 Swift ObjectMapper를 사용하여 앱의 데이터 캐싱을 구현하는 방법을 알게 되었습니다. 이를 활용하여 앱의 성능을 향상시키고 네트워크 사용을 줄일 수 있습니다.

참고 문서: