[swift] Moya와 ObjectMapper를 활용한 JSON 응답을 모델 객체로 변환하는 코드 구현 예시 설명

개요

이번 포스트에서는 Moya와 ObjectMapper를 사용하여 JSON 응답을 모델 객체로 변환하는 코드를 구현하는 예시를 설명합니다. Moya는 네트워킹 라이브러리이며, ObjectMapper는 JSON과 모델 객체 간의 매핑을 쉽게 처리하는 라이브러리입니다. 이 두 라이브러리를 함께 사용하여 효율적인 네트워킹 및 모델 매핑을 구현할 수 있습니다.

환경 설정

먼저, 프로젝트에 Moya와 ObjectMapper를 추가해야 합니다. CocoaPods를 사용한다면 Podfile에 다음과 같이 라이브러리를 추가합니다.

pod 'Moya'
pod 'ObjectMapper'

설치 후, 프로젝트를 업데이트합니다.

모델 객체 정의

매핑할 모델 객체를 정의합니다. 예를 들어, 사용자 정보를 나타내는 User 모델 객체를 정의하겠습니다.

import ObjectMapper

struct User: Mappable {
    var id: Int
    var name: String
    var email: String

    init?(map: Map) {}

    mutating func mapping(map: Map) {
        id <- map["id"]
        name <- map["name"]
        email <- map["email"]
    }
}

위 코드에서 Mappable 프로토콜을 채택하여 ObjectMapper의 매핑 메서드를 구현합니다. 모델 객체의 속성과 JSON의 키를 매핑하여 변수에 할당하는 작업을 수행합니다.

네트워크 요청 및 모델 매핑

Moya를 사용하여 네트워크 요청을 보내고, ObjectMapper를 사용하여 JSON 응답을 모델 객체로 매핑합니다. 예를 들어, 사용자 정보를 가져오는 GET 요청을 보내고 응답을 모델 객체로 변환하는 코드를 구현해보겠습니다.

import Moya
import ObjectMapper

let provider = MoyaProvider<API>()

provider.request(.getUser(id: 1)) { result in
    switch result {
    case let .success(response):
        do {
            let data = try response.mapJSON()
            if let jsonData = data as? [String: Any] {
                if let user = Mapper<User>().map(JSONObject: jsonData) {
                    print(user.id)
                    print(user.name)
                    print(user.email)
                }
            }
        } catch {
            print("Mapping error: \(error)")
        }
    case let .failure(error):
        print("Network error: \(error)")
    }
}

위 코드에서 MoyaProvider를 사용하여 GET 요청을 보냅니다. 응답은 mapJSON() 메서드로 JSON으로 변환한 뒤, ObjectMapper의 map(JSONObject:) 메서드를 사용하여 모델 객체로 매핑합니다. 매핑이 성공하면 모델 객체의 속성을 사용할 수 있습니다.

결론

Moya와 ObjectMapper를 함께 사용하여 JSON 응답을 모델 객체로 변환하는 코드를 구현하는 방법에 대해 알아보았습니다. 이를 통해 복잡한 네트워킹 로직과 모델 매핑 작업을 간편하게 처리할 수 있습니다.