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

Moya는 네트워크 요청을 처리하기 위한 Swift 기반의 라이브러리이고, ObjectMapper는 JSON 데이터를 Swift 객체로 변환하기 위한 라이브러리입니다. 이 두 가지 라이브러리를 함께 사용하면 JSON 응답을 모델로 변환하기 쉽게 할 수 있습니다.

아래에는 Moya와 ObjectMapper를 사용하여 JSON 응답을 모델로 변환하는 방법과 함께 코드 예제를 설명하겠습니다.

Moya와 ObjectMapper 설치

먼저, Moya와 ObjectMapper를 프로젝트에 설치해야 합니다. CocoaPods를 사용한다면 Podfile에 아래의 의존성을 추가합니다.

pod 'Moya'
pod 'ObjectMapper'

설치가 완료되면 프로젝트를 업데이트하여 새로운 의존성을 가져옵니다.

모델 클래스 작성

JSON 응답을 모델로 변환하기 위해 먼저 모델 클래스를 작성해야 합니다. 예를 들어, 다음과 같은 JSON 응답이 있다고 가정해봅시다.

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

이 JSON을 모델로 변환하기 위한 Swift 클래스를 작성합니다.

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"]
  }
}

위의 코드에서 Mappable 프로토콜을 채택하여 ObjectMapper에서 사용할 수 있도록 합니다. map 함수를 사용하여 JSON 키와 프로퍼티를 매핑하고, <- 연산자를 사용하여 JSON 데이터를 모델에 할당합니다.

Moya와 ObjectMapper를 사용하여 모델로 변환

이제 모델로 변환할 JSON 응답을 받는 Moya의 요청을 작성합니다. 예를 들어, 서버로부터 사용자 정보를 가져오는 요청을 보내는 UserService 클래스가 있다고 가정해봅시다.

import Moya
import ObjectMapper

enum UserService {
  case getUser(id: Int)
}

extension UserService: TargetType {
  var baseURL: URL {
    return URL(string: "https://api.example.com")!
  }
  
  var path: String {
    switch self {
    case .getUser(let id):
      return "/users/\(id)"
    }
  }
  
  var method: Moya.Method {
    return .get
  }
  
  var sampleData: Data {
    return Data()
  }
  
  var task: Task {
    return .requestPlain
  }
  
  var headers: [String: String]? {
    return nil
  }
}

let provider = MoyaProvider<UserService>()

provider.request(.getUser(id: 1)) { result in
  switch result {
  case .success(let response):
    do {
      let user = try response.mapObject(User.self)
      print("User: \(user.name ?? "")")
    } catch {
      print("Error mapping object:", error)
    }
  case .failure(let error):
    print("Request error:", error)
  }
}

위의 코드에서 UserService enum을 작성하여 Moya 요청을 정의합니다. 마찬가지로 ObjectMapper를 사용하여 JSON 데이터를 모델로 변환합니다. response.mapObject(User.self)를 호출하면 JSON 응답을 User 모델로 매핑할 수 있습니다.

이제 Moya와 ObjectMapper를 사용하여 JSON 응답을 모델로 변환하는 방법과 코드 예제를 설명하였습니다. 이를 참고하여 실제 프로젝트에서 사용해보시기 바랍니다.

참고 자료