[swift] Moya와 ObjectMapper를 사용하여 JSON 데이터를 모델로 변환하는 방법 및 예제 구현 설명

이번 블로그에서는 Swift에서 Moya와 ObjectMapper를 사용하여 JSON 데이터를 모델로 변환하는 방법과 예제 구현을 설명하겠습니다. Moya는 네트워크 요청을 추상화하는 라이브러리이고, ObjectMapper는 JSON 데이터를 모델로 매핑하는 라이브러리입니다.

Moya 및 ObjectMapper 설치

먼저, 프로젝트에 Moya와 ObjectMapper를 설치해야 합니다. CocoaPods를 사용하여 설치하는 방법은 다음과 같습니다:

  1. Podfile 파일에 다음 라인을 추가합니다:
pod 'Moya'
pod 'ObjectMapper'
  1. 터미널을 열고 프로젝트가 있는 디렉토리로 이동한 후 pod install 명령어를 실행합니다.

모델 클래스 생성

예제로 사용할 모델 클래스를 생성합니다. 예를 들어, 다음과 같은 JSON 데이터를 모델로 변환하고자 한다고 가정해보겠습니다:

{
  "name": "John Doe",
  "age": 30,
  "email": "johndoe@example.com"
}

그리고 위 JSON 데이터를 다음과 같은 Swift 클래스로 매핑하려고 합니다:

class User: Mappable {
    var name: String?
    var age: Int?
    var email: String?

    // Mappable 프로토콜의 required initializer 구현
    required init?(map: Map) {}

    // mapping 함수 구현
    func mapping(map: Map) {
        name <- map["name"]
        age <- map["age"]
        email <- map["email"]
    }
}

Moya와 ObjectMapper를 사용한 JSON 데이터 변환

이제 Moya와 ObjectMapper를 사용하여 네트워크 요청을 보내고 JSON 데이터를 모델로 변환해보겠습니다. 예제로는 GitHub API의 사용자 정보를 가져오는 요청을 보내고 그 결과를 위에서 만든 User 모델에 매핑해보겠습니다.

import Moya
import ObjectMapper

// MoyaProvider를 사용하여 GitHub API에 대한 provider를 생성
let provider = MoyaProvider<GitHubAPI>()

// GitHubAPI 열거형에 사용자 정보를 가져오는 요청 추가
enum GitHubAPI {
    case getUser(username: String)
}

extension GitHubAPI: TargetType {
    var baseURL: URL {
        return URL(string: "https://api.github.com")!
    }

    var path: String {
        switch self {
        case .getUser(let username):
            return "/users/\(username)"
        }
    }

    var method: Moya.Method {
        return .get
    }

    var sampleData: Data {
        return Data()
    }

    var task: Task {
        return .requestPlain
    }

    var headers: [String: String]? {
        return nil
    }
}

// GitHubAPI에 대한 MoyaProvider로부터 요청 수행
provider.request(.getUser(username: "john")) { result in
    switch result {
    case let .success(response):
        do {
            // ObjectMapper를 사용하여 JSON 데이터를 User 모델로 매핑
            let user = try response.mapObject(User.self)
            print(user.name)
            print(user.age)
            print(user.email)
        } catch {
            print("Mapping failed")
        }
    case let .failure(error):
        print(error)
    }
}

위 예제에서는 GitHub API에서 사용자 정보를 가져오는 요청을 보내기 위해 GitHubAPI 열거형을 정의하였습니다. 이 열거형은 TargetType 프로토콜을 구현하며, 필요한 요청 URL, HTTP 메소드, 헤더, 파라미터 등의 정보를 제공합니다.

provider.request(.getUser(username: "john")) 메소드를 사용하여 GitHub API로부터 사용자 정보를 가져온 후, response.mapObject(User.self)를 호출하여 JSON 데이터를 User 모델로 매핑합니다. 매핑이 실패하면 catch 블록에서 에러가 처리됩니다.

이제 위 예제를 실행하면 GitHub API로부터 가져온 사용자 정보가 User 모델 객체로 매핑되어 출력될 것입니다.

결론

이렇게 Moya와 ObjectMapper를 사용하여 JSON 데이터를 모델로 변환하는 방법과 예제 구현에 대해 알아보았습니다. Moya와 ObjectMapper는 각각 네트워크 요청 추상화와 JSON 데이터 매핑을 쉽게 처리할 수 있도록 도와줍니다. 이를 통해 Swift 애플리케이션에서 간편하게 API 호출과 모델 매핑을 수행할 수 있습니다.

더 자세한 내용은 Moya 공식 문서ObjectMapper 공식 문서를 참고하시기 바랍니다.