[swift] Moya와 ObjectMapper를 사용하여 JSON 응답을 모델로 변환하는 방법 및 코드 예제 설명

Moya는 네트워킹 라이브러리로, 서버와의 통신을 처리하기 위해 사용됩니다. ObjectMapper는 JSON 데이터를 모델 객체로 변환하기 위해 사용됩니다. 이 두 가지 라이브러리를 함께 사용하면 간단하게 JSON 응답을 모델로 자동 변환할 수 있습니다.

설치

Moya와 ObjectMapper는 각각 Cocoapods, Carthage 또는 Swift Package Manager를 통해 설치할 수 있습니다. 아래는 Cocoapods를 사용하는 예제입니다.

pod 'Moya'
pod 'ObjectMapper'

모델 클래스 생성

먼저, JSON 응답에 대응하는 모델 클래스를 생성해야 합니다. 예를 들어, 다음과 같은 JSON 응답이 있다고 가정해봅시다.

{
  "name": "John",
  "age": 30,
  "email": "john@example.com"
}

해당 JSON 응답에 대응하는 모델 클래스를 작성해보겠습니다.

import ObjectMapper

class User: Mappable {
    var name: String?
    var age: Int?
    var email: String?

    required init?(map: Map) {}

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

User 클래스는 ObjectMapper의 Mappable 프로토콜을 구현하고, 이름(name), 나이(age), 이메일(email)을 변수로 가지고 있습니다. mapping(map:) 함수에서는 각 변수를 해당하는 JSON 키와 매핑하고 있습니다.

Moya 요청 작성

이제 Moya를 사용하여 서버로부터 JSON 응답을 받아오는 요청을 작성해보겠습니다.

import Moya

let provider = MoyaProvider<API>()

provider.request(.getUser) { result in
    switch result {
    case .success(let response):
        do {
            let user = try response.mapJSON() as! [String: Any]
            let userModel = Mapper<User>().map(JSON: user)
            
            if let user = userModel {
                // 모델로 변환된 유저 객체 사용
                print(user.name)
                print(user.age)
                print(user.email)
            }
        } catch {
            print("JSON 매핑 에러: \(error)")
        }
    case .failure(let error):
        print("네트워크 에러: \(error)")
    }
}

위의 코드에서 provider.request는 Moya로 서버로 요청을 보내는 메소드입니다. 응답을 받아오면 response.mapJSON()을 통해 JSON 데이터를 딕셔너리로 변환한 뒤, ObjectMapper의 map(JSON:) 메소드를 사용하여 딕셔너리를 User 객체로 매핑합니다. 그 후, 모델로 변환된 User 객체를 사용할 수 있습니다.

결론

Moya와 ObjectMapper를 함께 사용하여 JSON 응답을 모델로 자동 변환하는 방법과 코드 예제를 살펴보았습니다. 이를 통해 네트워킹 코드를 간소화하고 JSON 데이터를 모델로 쉽게 변환할 수 있습니다.

자세한 내용은 아래의 참고 자료를 확인하시기 바랍니다.