[swift] Moya와 ObjectMapper를 사용하여 JSON 응답을 모델 객체로 변환하는 코드 예제

이 예제에서는 Swift의 Moya와 ObjectMapper 라이브러리를 사용하여 JSON 응답을 모델 객체로 변환하는 방법을 알아보겠습니다.

Moya와 ObjectMapper 설치

먼저 프로젝트에 Moya와 ObjectMapper를 설치해야 합니다. Podfile에 아래와 같이 추가한 후 pod install 명령을 실행하세요.

pod 'Moya'
pod 'ObjectMapper'

모델 객체 만들기

먼저, JSON 응답을 파싱하기 위해 사용할 모델 객체를 만들어야 합니다. 예를 들어, 사용자 정보를 담을 User 객체를 만들어보겠습니다.

import ObjectMapper

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

위의 코드에서 Mappable 프로토콜을 준수하는 User 구조체를 만들었습니다. nameemail은 JSON 응답에서 추출한 필드와 매핑됩니다.

Moya 서비스 생성하기

다음으로, Moya를 사용하여 서버 요청을 처리하는 서비스를 생성합니다. 예를 들어, 사용자 정보를 가져오는 UserService를 생성하는 코드를 작성해보겠습니다.

import Moya

enum UserService {
    case getUser(id: Int)
}

extension UserService: TargetType {
    var baseURL: URL {
        return URL(string: "https://api.example.com")!
    }
    
    var path: String {
        switch self {
        case .getUser(let id):
            return "/user/\(id)"
        }
    }
    
    var method: Moya.Method {
        return .get
    }
    
    var task: Task {
        return .requestPlain
    }
    
    var sampleData: Data {
        return Data()
    }
    
    var headers: [String : String]? {
        return nil
    }
}

위의 코드에서는 TargetType 프로토콜을 준수하는 UserService를 생성했습니다. baseURL, path, method, task 등의 값들을 설정하여 서비스의 동작을 정의할 수 있습니다.

Moya 요청 보내기

이제 Moya를 사용하여 서버에 요청을 보내고 JSON 응답을 모델 객체로 변환해보겠습니다. 아래의 코드는 UserService를 사용하여 사용자 정보를 가져오는 예제입니다.

import Moya
import ObjectMapper

let provider = MoyaProvider<UserService>()

provider.request(.getUser(id: 123)) { result in
    switch result {
    case .success(let response):
        do {
            let user = try response.mapObject(User.self)
            print("User name: \(user.name), Email: \(user.email)")
        } catch {
            print("Error: \(error.localizedDescription)")
        }
    case .failure(let error):
        print("Error: \(error.localizedDescription)")
    }
}

위의 코드에서는 MoyaProvider를 사용하여 UserService로 정의된 요청을 보냈습니다. response.mapObject(User.self)를 사용하여 JSON 응답을 User 객체로 변환합니다.

또한, 요청이 성공한 경우 User 객체의 속성을 출력하고, 요청이 실패한 경우에는 에러를 출력합니다.

이제 위의 코드를 실행하면 서버에서 응답을 받아와서 User 객체로 변환하여 출력하는 예제가 완성됩니다.

마무리

위의 예제에서는 Moya와 ObjectMapper를 이용하여 JSON 응답을 모델 객체로 변환하는 방법을 소개했습니다. 이를 통해 간편하게 서버 응답을 파싱하여 Swift 애플리케이션에서 활용할 수 있습니다.

참고 자료