[swift] Moya와 ObjectMapper을 사용하여 JSON 데이터를 모델 객체로 변환하기

Moya와 ObjectMapper은 Swift에서 JSON 데이터를 쉽게 모델 객체로 변환하는 데 도움이 되는 라이브러리입니다. Moya는 네트워크 요청을 추상화하고, ObjectMapper는 JSON 데이터를 모델 객체로 매핑합니다. 이 두 라이브러리를 함께 사용하면 네트워크 요청을 보내고 전달받은 JSON 데이터를 모델 객체로 변환하는 과정을 간단하게 처리할 수 있습니다.

Moya와 ObjectMapper 설치하기

Moya와 ObjectMapper을 사용하기 위해 먼저 두 라이브러리를 설치해야 합니다. CocoaPods를 사용하여 설치할 수 있는데, Podfile에 다음과 같이 추가합니다:

target 'YourProjectName' do
  use_frameworks!
  
  # 기타 라이브러리
  
  pod 'Moya'
  pod 'ObjectMapper'
end

설치를 완료한 후, .xcworkspace 파일을 열고 라이브러리를 import합니다.

import Moya
import ObjectMapper

모델 객체 정의하기

JSON 데이터를 모델 객체로 변환하기 위해서는 먼저 모델 객체를 정의해야 합니다. 간단한 예제를 위해 User 모델을 정의합니다.

struct User: Mappable {
  var name: String?
  var age: Int?
  
  init?(map: Map) {}
  
  mutating func mapping(map: Map) {
    name <- map["name"]
    age <- map["age"]
  }
}

Mappable 프로토콜을 구현하고, mapping(map:) 함수를 사용하여 JSON 데이터와 모델 객체의 속성을 매핑합니다.

네트워크 요청 보내기

Moya를 사용하여 네트워크 요청을 보냅니다. 예를 들어, GET 방식으로 https://api.example.com/users 엔드포인트에 요청을 보내고 JSON 데이터를 받아오는 경우를 살펴보겠습니다.

enum UserService {
  case getUsers
}

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

let provider = MoyaProvider<UserService>()

provider.request(.getUsers) { result in
  switch result {
  case let .success(response):
    do {
      let users = try response.mapArray(User.self)
      // 모델 객체로 변환된 데이터 사용
    } catch {
      // 변환 실패 처리
    }
  case let .failure(error):
    // 요청 실패 처리
  }
}

위의 코드에서 UserService 열거형은 Moya의 TargetType 프로토콜을 구현합니다. baseURL, path, method, task, headers 등을 설정하여 네트워크 요청을 정의합니다.

MoyaProvider 클래스를 사용하여 실제 요청을 보냅니다. response.mapArray(User.self)를 사용하여 JSON 데이터를 User 모델 객체 배열로 변환합니다.

JSON 데이터를 모델 객체로 변환하기

이제 JSON 데이터를 모델 객체로 변환하는 과정을 살펴봅시다. Moya는 ObjectMapper와의 연동을 제공하므로, 네트워크 응답을 받았을 때 오류 처리와 함께 ObjectMapper를 사용하여 JSON을 모델 객체로 변환할 수 있습니다.

do {
  let users = try response.mapArray(User.self)
  // 모델 객체로 변환된 데이터 사용
} catch {
  // 변환 실패 처리
}

위의 코드에서 response는 Moya의 네트워크 응답 객체입니다. response.mapArray(User.self)를 호출하여 JSON 데이터를 User 모델 객체 배열로 변환합니다. 변환에 실패하는 경우 catch 블록에서 추가 처리를 할 수 있습니다.

결론

Moya와 ObjectMapper는 Swift에서 JSON 데이터를 모델 객체로 쉽게 변환할 수 있도록 도와주는 강력한 라이브러리입니다. 네트워크 요청과 JSON 매핑을 간단한 코드로 처리할 수 있으므로 개발자들은 보다 효율적이고 생산적인 개발 경험을 할 수 있습니다.

참고 자료