[swift] Moya와 ObjectMapper를 사용하여 JSON 데이터를 모델로 변환하는 방법과 예제 코드

Moya는 네트워킹 라이브러리이고, ObjectMapper는 JSON 데이터를 모델로 변환하는 라이브러리입니다. 이 두 가지 라이브러리를 함께 사용하면 Swift에서 JSON 데이터를 간단하게 모델로 변환할 수 있습니다.

Moya란?

Moya는 Alamofire를 기반으로 하는 네트워킹 추상화 라이브러리입니다. Moya는 네트워킹 작업을 추상화하여 코드를 단순화하고 읽기 쉽게 만들어줍니다. API 요청을 정의하는 Enum 형태의 Provider를 생성할 수 있으며, RxSwift와의 결합도 지원합니다.

ObjectMapper란?

ObjectMapper는 Swift에서 JSON 데이터를 모델 객체로 변환하는 강력한 도구입니다. ObjectMapper는 JSON 데이터와 모델 클래스간의 매핑을 자동화해줍니다. 필요한 경우 JSON의 키를 모델 속성과 매핑하거나, JSON의 값을 모델 속성으로 변환할 수 있습니다.

JSON 데이터를 모델로 변환하는 예제 코드

Moya와 ObjectMapper를 사용하여 JSON 데이터를 모델로 변환하는 예제 코드를 살펴보겠습니다.

먼저, Moya와 ObjectMapper를 설치해야합니다. Cocoapods를 통해 설치하는 방법은 다음과 같습니다:

pod 'Moya'
pod 'ObjectMapper'

이제 예제 코드를 작성해봅시다. 아래 예제는 특정 게시물의 JSON 데이터를 가져와서 모델로 변환하는 코드입니다. 예제 코드는 JSONPlaceholder API에서 데이터를 가져옵니다.

먼저, 모델 클래스를 만들어야 합니다.

import ObjectMapper

struct Post: Mappable {
    var id: Int?
    var title: String?
    var body: String?
  
    init?(map: Map) {}
  
    mutating func mapping(map: Map) {
      id <- map["id"]
      title <- map["title"]
      body <- map["body"]
    }
}

다음으로, Moya를 사용하여 JSON 데이터를 가져오는 Provider를 생성합니다.

import Moya

enum API {
    case getPost
}

extension API: TargetType {
    var baseURL: URL {
        return URL(string: "https://jsonplaceholder.typicode.com")!
    }
  
    var path: String {
        switch self {
          case .getPost:
            return "/posts/1"
        }
    }
  
    var method: Moya.Method {
        return .get
    }
  
    var task: Task {
        return .requestPlain
    }
  
    var headers: [String: String]? {
        return nil
    }
  
    var sampleData: Data {
        return Data()
    }
}

let provider = MoyaProvider<API>()

마지막으로, MoyaProvider로 API를 호출하고 ObjectMapper를 사용하여 JSON 데이터를 모델로 변환합니다.

provider.request(.getPost) { (result) in
    switch result {
    case .success(let response):
        do {
            let json = try response.mapJSON()
            if let dict = json as? [String: Any] {
                if let post = Mapper<Post>().map(JSON: dict) {
                    print("Post title: \(post.title ?? "")")
                    print("Post body: \(post.body ?? "")")
                }
            }
        } catch let error {
            print("Error: \(error)")
        }
    case .failure(let error):
        print("Error: \(error)")
    }
}

위 예제 코드에서는 MoyaProvider로 API 호출을 수행하고, 받아온 JSON 데이터를 Mapper를 사용하여 Post 모델로 변환합니다. 변환된 모델을 출력하여 확인할 수 있습니다.

이렇게 Moya와 ObjectMapper를 함께 사용하여 JSON 데이터를 모델로 변환하는 방법과 예제 코드를 살펴보았습니다. Moya의 추상화된 네트워킹 작업과 ObjectMapper의 JSON 데이터-모델 매핑 기능을 통해 Swift 애플리케이션에서 JSON 데이터 처리를 간편하게 할 수 있습니다.