[swift] Moya와 ObjectMapper를 활용한 JSON 응답을 모델 객체로 변환하는 코드 구현 예시 설명

개요

이 예시에서는 Moya와 ObjectMapper를 사용하여 JSON 응답을 Swift 모델 객체로 변환하는 방법을 설명합니다. Moya는 네트워킹 추상화 라이브러리이며, ObjectMapper는 JSON과 모델 객체 간의 매핑을 담당하는 라이브러리입니다.

Moya와 ObjectMapper 설치

CocoaPods를 사용하여 Moya와 ObjectMapper를 설치할 수 있습니다. Podfile에 다음과 같은 의존성을 추가합니다:

pod 'Moya'
pod 'ObjectMapper'

그리고 터미널에서 다음 명령어를 실행하여 의존성을 설치합니다:

$ pod install

모델 클래스 생성

먼저, Moya가 수신한 JSON 응답을 매핑하기 위한 Swift 모델 클래스를 생성합니다. 예를 들어, 다음과 같은 User 모델을 생성해봅시다:

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

위의 코드에서 User 클래스는 Mappable 프로토콜을 채택하고 있습니다. Mappable 프로토콜을 채택하는 클래스는 ObjectMapper의 매핑 기능을 사용할 수 있습니다. required init?(map: Map)은 Mappable 프로토콜의 요구사항으로, 초기화를 위한 이니셜라이저를 정의해야 합니다. func mapping(map: Map)에서는 JSON 키와 모델 프로퍼티를 매핑해줍니다.

MoyaProvider 생성 및 요청 전송

이제, MoyaProvider 인스턴스를 생성하여 서버로 요청을 보내고 JSON 응답을 받아옵니다. 예를 들어, 다음과 같이 MoyaProvider를 생성하고 요청을 전송할 수 있습니다:

import Moya

let provider = MoyaProvider<YourAPI>()

provider.request(.getUser(id: 1)) { result in
    switch result {
    case .success(let response):
        do {
            let user = try response.mapObject(User.self)
            // 변환된 User 객체를 사용할 수 있습니다.
        } catch {
            // 매핑 실패 시 에러 처리를 할 수 있습니다.
        }
    case .failure(let error):
        // 요청 실패 시 에러 처리를 할 수 있습니다.
    }
}

위의 코드에서 YourAPI는 서버 API 엔드포인트를 정의한 Enum입니다. request 메서드는 비동기로 요청을 전송하고, 결과를 클로저로 받습니다. response.mapObject(User.self)는 ObjectMapper를 사용하여 JSON 응답을 User 모델 객체로 변환하는 부분입니다. 변환에 실패하면 catch 블록으로 이동하여 에러 처리를 할 수 있습니다.

결론

이렇게 Moya와 ObjectMapper를 사용하여 JSON 응답을 모델 객체로 변환하는 코드를 구현할 수 있습니다. Moya의 추상화 레이어와 ObjectMapper의 매핑 기능을 적절히 활용하면 네트워킹 코드를 간결하게 작성할 수 있고, JSON과 모델 객체간의 매핑도 쉽게 처리할 수 있습니다.

참고 자료