[swift] SwiftyJSON을 사용하여 JSON 데이터의 메모이제이션하기

JSON 데이터를 처리하다 보면 동일한 데이터를 계속해서 가져와야 할 경우가 생길 수 있습니다. 이런 경우, 매번 동일한 API 호출을 하기보다는 한 번 가져온 데이터를 다시 사용하는 것이 효율적일 수 있습니다.

SwiftyJSON은 Swift에서 JSON 데이터를 다루는데 유용한 라이브러리입니다. 이를 사용하여 JSON 데이터를 메모이제이션할 수 있습니다. 메모이제이션은 한 번 계산한 값을 저장해 두었다가 필요할 때 다시 사용하는 것을 말합니다.

SwiftyJSON 설치하기

SwiftyJSON을 사용하기 위해서는 먼저 프로젝트에 이를 설치해야 합니다. Swift Package Manager를 사용한다면, Package.swift 파일에 다음과 같이 SwiftyJSON을 추가할 수 있습니다.

// Package.swift

// ...

dependencies: [
    .package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "4.0.0")
],
targets: [
    .target(
        name: "MyApp",
        dependencies: ["SwiftyJSON"]),
    // ...
]

Xcode 프로젝트를 사용하는 경우, CocoaPods를 이용하여 설치할 수 있습니다. Podfile 파일에 아래의 라인을 추가한 후, pod install 명령어를 실행하세요.

# Podfile

# ...

target 'MyApp' do
  # ...

  pod 'SwiftyJSON'
end

JSON 데이터 메모이제이션 예시

이제 SwiftyJSON을 사용하여 JSON 데이터의 메모이제이션을 해보겠습니다.

import SwiftyJSON

class DataManager {
    static let shared = DataManager()
    
    private var cachedData: JSON?
    
    private init() {}
    
    func fetchData(completion: @escaping (JSON) -> Void) {
        if let data = cachedData {
            completion(data)
        } else {
            // API 호출을 통해 데이터를 가져온다고 가정
            APIService.shared.fetchData { response in
                // JSON 데이터를 SwiftyJSON 객체로 변환하여 메모이제이션
                self.cachedData = JSON(response)
                completion(self.cachedData!)
            }
        }
    }
}

위의 코드에서 DataManager 클래스는 fetchData(completion:) 메소드를 통해 데이터를 가져오는 역할을 합니다. cachedData 프로퍼티는 SwiftyJSON에서 사용하는 JSON 타입의 변수로, 가져온 데이터를 저장해 둡니다.

fetchData(completion:) 메소드를 호출하면 먼저 cachedData에 값이 있는지 확인합니다. 값이 있다면 저장된 데이터를 completion 핸들러에 전달하여 재사용합니다. 값이 없다면 API 호출을 통해 데이터를 가져온 후 cachedData에 저장하고 completion 핸들러에 전달합니다.

이제 다음과 같이 DataManager.shared.fetchData를 호출하여 데이터를 가져올 수 있습니다.

DataManager.shared.fetchData { data in
    // 처리할 코드
}

이렇게 함으로써 동일한 데이터를 여러 번 가져오는 경우에도 처음 한 번 가져온 데이터를 재사용하여 성능을 향상시킬 수 있습니다.

참고 자료