이번 포스트에서는 Swift에서 Moya와 ObjectMapper를 함께 사용하여 JSON 응답을 모델 객체로 변환하는 방법에 대해 알아보겠습니다. Moya는 네트워크 요청을 쉽게 구성하기 위한 라이브러리이며, ObjectMapper는 JSON과 모델 객체 간의 매핑을 쉽게 수행할 수 있는 라이브러리입니다.
필요한 패키지 설치
Moya와 ObjectMapper를 사용하기 위해 먼저 Cocoapods를 통해 패키지를 설치해야 합니다. Podfile에 다음과 같이 추가하고 pod install
을 실행하세요.
pod 'Moya'
pod 'ObjectMapper'
모델 객체 생성
먼저, JSON 응답을 매핑할 모델 객체를 생성합니다. 예를 들어, ‘User’라는 모델 객체를 생성해 보겠습니다.
import ObjectMapper
class User: Mappable {
var name: String?
var age: Int?
required init?(map: Map) {}
func mapping(map: Map) {
name <- map["name"]
age <- map["age"]
}
}
위 예제에서는 ObjectMapper 라이브러리의 Mappable
프로토콜을 구현하는 User
클래스를 정의했습니다. Mappable
프로토콜은 ObjectMapper에서 사용되며, required init?(map: Map)
과 mapping(map: Map)
메서드를 구현해야 합니다. mapping(map: Map)
메서드에서는 JSON 키와 모델 객체의 프로퍼티를 매핑합니다.
네트워크 요청 생성
다음으로, Moya를 사용하여 네트워크 요청을 생성합니다. 예를 들어, ‘GET’ 방식의 /user
API를 호출하여 JSON 응답을 받아오는 요청을 생성해 보겠습니다.
import Moya
enum UserService {
case getUser
}
extension UserService: TargetType {
var baseURL: URL {
return URL(string: "https://api.example.com")!
}
var path: String {
return "/user"
}
var method: Moya.Method {
return .get
}
var task: Task {
return .requestPlain
}
var headers: [String: String]? {
return nil
}
}
위 예제에서는 Moya를 이용해 UserService
열거형을 정의하고, TargetType
프로토콜을 구현했습니다. baseURL
, path
, method
, task
, headers
등의 프로퍼티를 설정하여 요청을 정의할 수 있습니다.
응답 매핑
마지막으로, Moya를 사용하여 네트워크 요청을 보내고 ObjectMapper를 사용하여 응답을 모델 객체로 매핑합니다.
import Moya
import ObjectMapper
let provider = MoyaProvider<UserService>()
provider.request(.getUser) { result in
switch result {
case .success(let response):
do {
let json = try response.mapJSON()
if let user = Mapper<User>().map(JSONObject: json) {
print("User name: \(user.name)") // 모델 객체의 프로퍼티에 접근하여 사용할 수 있습니다.
}
} catch {
print("Mapping error: \(error)")
}
case .failure(let error):
print("Network error: \(error)")
}
}
위 예제에서는 MoyaProvider를 이용해 UserService
의 getUser
요청을 보냅니다. 응답은 JSON 형태로 받아오며, ObjectMapper를 사용하여 JSON을 모델 객체로 매핑합니다. Mapper<User>().map(JSONObject: json)
를 통해 JSON을 모델 객체로 변환할 수 있습니다.
이제 위의 예제 코드를 참고하여 Moya와 ObjectMapper를 활용하여 JSON 응답을 모델 객체로 변환하는 코드를 구현해보세요.