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

Moya는 네트워크 작업을 추상화하는 라이브러리이고, ObjectMapper는 JSON 데이터를 모델 객체로 변환해주는 라이브러리입니다. 이 두 라이브러리를 함께 사용하면 간단하게 JSON 응답을 모델로 변환할 수 있습니다.

1. Moya와 ObjectMapper 설치하기

먼저, 프로젝트의 Podfile에 Moya와 ObjectMapper를 추가해주세요.

# Podfile

platform :ios, '13.0'

target 'YourApp' do
  use_frameworks!

  pod 'Moya', '~> 14.0'
  pod 'ObjectMapper', '~> 4.0'
end

그리고 터미널에서 pod install 명령어를 실행하여 라이브러리를 설치합니다.

2. 모델 클래스 생성하기

모델 클래스를 생성해주세요. 예를 들어, 다음과 같은 JSON 응답이 있다고 가정하겠습니다.

{
  "id": 1,
  "name": "John Doe",
  "email": "johndoe@example.com"
}

이 JSON 응답을 다음과 같이 모델로 변환할 수 있는 클래스를 작성합니다.

import ObjectMapper

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

3. Moya와 ObjectMapper를 사용한 모델 변환

이제, Moya와 ObjectMapper를 사용하여 JSON 응답을 모델로 변환해보겠습니다. 예를 들어, 다음과 같이 Moya를 사용하여 네트워크 요청을 보내고 응답을 받는 코드가 있다고 가정하겠습니다.

import Moya

let provider = MoyaProvider<YourAPI>()

provider.request(.getUser(id: 1)) { result in
    switch result {
    case .success(let response):
        do {
            let json = try response.mapJSON()
            if let userJSON = json as? [String: Any] {
                let user = Mapper<User>().map(JSONObject: userJSON)
                if let user = user {
                    // 변환된 모델 사용
                    print("User name: \(user.name ?? "")")
                }
            }
        } catch {
            // JSON 변환 실패 처리
            print("JSON parsing error: \(error)")
        }
    case .failure(let error):
        // 네트워크 요청 실패 처리
        print("Network request error: \(error)")
    }
}

위 코드에서 YourAPI는 Moya의 TargetType을 구현한 프로토콜로, getUser 요청을 정의한 것입니다.

위 코드의 핵심은 다음 두 줄입니다.

let user = Mapper<User>().map(JSONObject: userJSON)
print("User name: \(user.name ?? "")")

Mapper<User>()를 사용하여 ObjectMapper의 매핑을 수행하고, map(JSONObject: userJSON) 메소드를 사용하여 JSON을 모델로 변환합니다. 변환된 모델 객체를 사용할 수 있게 되면 해당 객체의 프로퍼티를 사용할 수 있습니다.

이제 Moya와 ObjectMapper를 사용하여 JSON 응답을 모델로 변환하는 기본적인 방법을 알아보았습니다. 자세한 내용은 Moya와 ObjectMapper의 공식 문서를 참고하시기 바랍니다.

참고 문서: