[swift] Moya와 ObjectMapper를 사용하여 API 호출 후 데이터 매핑하는 프로세스 이해하기 설명

개요

이번 포스트에서는 Swift 프레임워크인 Moya와 ObjectMapper를 함께 사용하여 API 호출 후 데이터를 매핑하는 프로세스에 대해 알아보겠습니다. Moya는 Alamofire를 기반으로 하여 네트워크 서비스를 쉽게 구축할 수 있는 추상화 레이어를 제공하고, ObjectMapper는 JSON 데이터와 Swift 객체 간의 매핑을 담당하는 라이브러리입니다.

Moya 설치

Moya를 사용하기 위해서는 먼저 Moya를 프로젝트에 설치해야 합니다. 이를 위해 CocoaPods을 사용할 경우, Podfile에 다음과 같은 내용을 추가합니다.

pod 'Moya'
pod 'Moya-ObjectMapper'

그리고 터미널을 열어 프로젝트 경로로 이동한 뒤 pod install 명령어를 실행하여 Moya와 ObjectMapper를 설치합니다.

모델 클래스 생성

API에서 받아온 데이터를 매핑하기 위해 모델 클래스를 생성합니다. 예를 들어, 사용자 정보를 담고 있는 User 모델 클래스를 생성한다고 가정해보겠습니다.

import Foundation
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에서 사용할 수 있도록 하였고, mapping(map:) 함수를 구현하여 JSON 데이터의 어떤 키를 어떤 속성에 매핑할 것인지 설정합니다.

API 호출 및 데이터 매핑

이제 Moya를 사용하여 API를 호출하고 ObjectMapper를 사용하여 데이터를 매핑해보겠습니다. 예를 들어, 사용자 목록을 가져오는 API를 호출하고 해당 데이터를 User 모델에 매핑하는 예제 코드를 살펴봅시다.

import Moya
import ObjectMapper

let provider = MoyaProvider<YourAPI>()

provider.request(.getUserList) { result in
    switch result {
    case let .success(response):
        do {
            let json = try response.mapJSON() as? [String: Any]
            if let userArray = json?["users"] as? [[String: Any]] {
                let userList = Mapper<User>().mapArray(JSONArray: userArray)
                // userList를 활용하여 필요한 작업을 수행합니다.
            }
        } catch {
            print("JSON 매핑 에러: \(error.localizedDescription)")
        }
    case let .failure(error):
        print("API 호출 에러: \(error.localizedDescription)")
    }
}

위의 코드에서는 MoyaProvider를 초기화한 후 .getUserList endpoint에 대한 API 호출을 수행합니다. 응답이 성공적으로 받아와지면, response.mapJSON() 메서드를 사용하여 데이터를 JSON으로 매핑합니다. 그리고 매핑된 JSON에서 사용자 배열을 추출한 뒤 ObjectMapper의 mapArray(JSONArray:) 메서드를 사용하여 User 객체 배열로 매핑합니다.

결론

이렇게 Moya와 ObjectMapper를 함께 사용하여 API 호출 후 데이터를 매핑하는 프로세스를 간단히 살펴보았습니다. Moya는 네트워크 요청을 추상화하여 간편하게 구현할 수 있도록 도와주고, ObjectMapper는 JSON 데이터와 Swift 객체 간의 매핑을 용이하게 해줍니다. 이를 통해 개발자는 데이터 매핑에 소비되는 시간과 노력을 줄일 수 있습니다.

참고 자료