[swift] Moya와 ObjectMapper를 사용하여 JSON 응답을 모델 객체로 변환하는 예제 구현

이번 포스트에서는 Moya와 ObjectMapper를 사용하여 JSON 응답을 Swift 모델 객체로 변환하는 방법에 대해 알아보겠습니다.

1. Moya와 ObjectMapper 설치

먼저, Moya와 ObjectMapper를 설치해야 합니다. CocoaPods를 사용한다면, Podfile에 다음과 같이 추가합니다:

pod 'Moya'
pod 'ObjectMapper'

설치가 완료되었다면, 프로젝트에서 import Moyaimport ObjectMapper를 추가해줍니다.

2. 모델 객체 생성

JSON 응답을 모델 객체로 변환하기 위해서는 먼저 모델 객체를 생성해야 합니다. 예를 들어, 서버에서 아래와 같은 JSON 응답을 받는다고 가정해봅시다:

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

위 JSON 응답을 다음과 같은 Swift 모델 객체로 변환하고자 합니다:

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

위 모델 객체는 ObjectMapper의 Mappable 프로토콜을 준수하며, mapping 함수를 통해 JSON의 key와 모델 객체의 프로퍼티를 매핑해줍니다.

3. Moya로 네트워크 요청 및 응답 처리

Moya는 네트워크 요청을 처리하기 위한 라이브러리입니다. 다음은 Moya를 사용하여 네트워크 요청을 보내고 JSON 응답을 모델 객체로 변환하는 예제 코드입니다:

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 {
    switch self {
    case .getUser:
      return .get
    }
  }

  var task: Task {
    switch self {
    case .getUser:
      return .requestPlain
    }
  }

  var headers: [String : String]? {
    return nil
  }

  var validationType: ValidationType {
    return .successCodes
  }
}

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)
    } catch {
      print(error)
    }
  case .failure(let error):
    print(error)
  }
}

UserService 열거형은 사용자 관련 네트워크 요청을 정의하는데 사용되며, TargetType 프로토콜을 준수합니다. 각 요청은 baseURL, path, method, task, headers 등의 정보를 정의합니다.

MoyaProvider에 요청을 보내고 응답을 처리하는 부분에서 ObjectMapper의 mapObject 함수를 사용하여 JSON 응답을 모델 객체로 변환합니다.

4. 실행 및 결과 확인

코드를 실행하면 Moya를 통해 네트워크 요청이 전송되고, 받아온 JSON 응답이 ObjectMapper를 사용하여 모델 객체로 변환됩니다. 이후 변환된 모델 객체를 활용하여 필요한 작업을 수행할 수 있습니다.

이상으로 Moya와 ObjectMapper를 사용하여 JSON 응답을 모델 객체로 변환하는 예제를 살펴보았습니다. Moya와 ObjectMapper는 각각 강력한 기능과 유연성을 가지고 있으며, 현재 많은 Swift 기반의 프로젝트에서 활발히 사용되고 있습니다. 추가적인 내용은 공식 문서와 예제를 참고하시기 바랍니다.

참고 자료