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

Moya는 네트워킹 라이브러리로, ObjectMapper는 JSON을 모델로 변환하는 라이브러리입니다. 이 두 가지 라이브러리를 함께 사용하여 JSON 응답을 모델로 변환하는 방법을 알아보겠습니다.

1. Moya 및 ObjectMapper 설치하기

먼저, 프로젝트에 Moya 및 ObjectMapper를 설치해야 합니다. 이를 위해 CocoaPods를 사용할 수 있습니다. Podfile에 다음과 같이 추가합니다:

pod 'Moya'
pod 'ObjectMapper'

그리고 터미널에서 다음 명령어를 실행하여 의존성을 설치합니다:

$ pod install

2. 모델 클래스 생성하기

JSON 응답을 모델로 변환하기 위해, 우선 모델 클래스를 생성해야 합니다. 예를 들어, 서버에서 다음과 같은 JSON 응답을 받았다고 가정해 보겠습니다:

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

해당 JSON 응답을 다음과 같은 모델 클래스로 변환할 수 있습니다:

import Foundation
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에서 제공하는 프로토콜로, 객체를 매핑할 때 사용됩니다.

3. Moya Provider 설정하기

Moya Provider는 Moya의 핵심 컴포넌트로, 네트워크 요청을 생성하고 응답을 처리합니다. 다음과 같이 Moya Provider를 설정합니다:

import Moya

let provider = MoyaProvider<YourAPI>()

여기서 YourAPI는 프로젝트에서 정의한 API 열거형입니다. API 열거형을 설정하는 과정은 생략하겠습니다.

4. 네트워크 요청 및 모델 변환하기

이제 Moya Provider를 사용하여 네트워크 요청을 보내고, ObjectMapper를 사용하여 JSON 응답을 모델로 변환할 수 있습니다. 다음은 간단한 예제입니다:

provider.request(.getUser(id: 1)) { result in
  switch result {
  case let .success(response):
    do {
      let user = try response.mapJSON()
      let userModel = Mapper<User>().map(JSONObject: user)
      
      // 모델로 변환된 데이터를 사용합니다
      
    } catch {
      // 오류 처리
    }
    
  case let .failure(error):
    // 오류 처리
  }
}

위의 코드에서, provider.request 메서드를 사용하여 네트워크 요청을 전송합니다. 성공적으로 응답을 받은 경우, mapJSON 메서드를 사용하여 JSON을 Any 객체로 변환합니다. 이후 Mapper를 사용하여 Any 객체를 User 모델 객체로 변환합니다.

5. 결과 처리하기

마지막으로, 모델로 변환된 데이터를 사용하거나 오류를 처리할 수 있습니다. 이 예제에서는 간단히 userModel 객체를 사용하도록 하겠습니다:

if let userModel = userModel {
  print("User ID: \(userModel.id)")
  print("User Name: \(userModel.name)")
  print("User Email: \(userModel.email)")
}

이와 같이 Moya와 ObjectMapper를 사용하여 JSON 응답을 모델로 변환할 수 있습니다. Moya의 강력한 네트워킹 능력과 ObjectMapper의 편리한 JSON 매핑 기능을 통해 더욱 효율적인 개발을 진행할 수 있습니다.

참고 자료