이 예제에서는 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
구조체를 만들었습니다. name
과 email
은 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 애플리케이션에서 활용할 수 있습니다.