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

1. ObjectMapper 설치

우선, ObjectMapper를 사용하기 위해 프로젝트에 ObjectMapper 라이브러리를 설치해야 합니다. Cocoapods를 이용한다면 Podfile에 아래와 같이 추가합니다.

pod 'ObjectMapper'

2. 모델 객체 생성

모델 객체를 생성하기 위해 다음과 같이 구조체나 클래스를 정의합니다.

struct User: Mappable {
    var name: String?
    var age: Int?

    init?(map: Map) {
        
    }

    mutating func mapping(map: Map) {
        name <- map["name"]
        age <- map["age"]
    }
}

위 코드에서 User 구조체는 Mappable 프로토콜을 구현하고 있습니다. 이는 ObjectMapper 라이브러리가 모델 객체를 JSON으로 매핑 및 역매핑하기 위해 사용하는 프로토콜입니다.

init?(map: Map)은 맵핑을 위한 초기화 메서드이고, mutating func mapping(map: Map)은 맵핑을 하는 메서드입니다. mapping 메서드에서 "name" 키에 해당하는 값을 name 속성에 매핑하도록 정의하고, "age" 키에 해당하는 값을 age 속성에 매핑하도록 정의했습니다.

3. Moya와 ObjectMapper를 활용한 JSON 매핑

Moya는 네트워크 라이브러리로서 서버 API 호출을 간단하게 할 수 있도록 도와줍니다. 이번 예시에서는 Alamofire와 함께 Moya를 사용합니다.

아래는 MoyaProvider를 이용해 API 호출 후, ObjectMapper를 사용하여 응답 JSON을 모델 객체로 변환하는 예시 코드입니다.

import Moya
import ObjectMapper

let provider = MoyaProvider<MyAPI>()

provider.request(.getUser) { result in
    switch result {
    case let .success(response):
        do {
            let user = try response.mapObject(User.self)
            print(user.name)
            print(user.age)
        } catch {
            print(error)
        }
    case let .failure(error):
        print(error)
    }
}

위 코드에서 getUser는 Moya의 TargetType 프로토콜을 준수하는 열거형으로, 서버 API 호출을 정의한 것입니다.

provider.request는 API 호출을 실행하는 메서드로, 결과는 result로 반환됩니다. 성공적인 경우 .success(response)가 호출되고, 이 때 response.mapObject(User.self)를 사용하여 응답 JSON을 User 모델 객체로 변환합니다.

변환한 User 객체에서 nameage 속성에 접근하여 사용할 수 있습니다.

이처럼 Moya와 ObjectMapper를 함께 사용하면 JSON 응답을 가진 서버 API 호출 후, 편리하게 응답 JSON을 모델 객체로 변환하여 사용할 수 있습니다.

참고 자료