[swift] Swift ObjectMapper를 사용한 네트워크 요청과 응답 처리 방법은?

네트워크 요청과 응답 처리는 앱 개발에서 매우 중요한 부분입니다. Swift ObjectMapper는 Swift에서 JSON 데이터를 객체로 매핑하는 데 사용되는 강력한 라이브러리입니다. 이 블로그 포스트에서는 Swift ObjectMapper를 사용하여 네트워크 요청과 응답을 어떻게 처리하는지에 대해 알아보겠습니다.

ObjectMapper 설치

먼저 ObjectMapper를 사용하기 위해 프로젝트에 설치해야 합니다. CocoaPods를 사용하는 경우, Podfile에 다음과 같이 ObjectMapper를 추가해주세요.

pod 'ObjectMapper'

설치한 후, .xcworkspace 파일을 열어주세요.

모델 클래스 작성

네트워크 요청과 응답에 사용할 모델 클래스를 작성해야 합니다. 예를 들어 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"]
    }
}

Mappable 프로토콜을 채택하고, nameage 프로퍼티를 선언한 후 mapping 메서드에서 매핑을 수행합니다.

네트워크 요청 처리

네트워크 요청을 처리하기 위해 Alamofire와 함께 ObjectMapper를 사용할 것입니다. 먼저 Alamofire를 설치해주세요.

pod 'Alamofire'

다음으로 네트워크 요청을 보내고 응답을 처리하는 코드를 작성해보겠습니다. 이 예제에서는 GET 요청을 보내고 응답을 User 객체로 매핑합니다.

import Alamofire
import ObjectMapper

func fetchUser(completion: @escaping (User?, Error?) -> Void) {
    Alamofire.request("https://api.example.com/user").responseObject { (response: DataResponse<User>) in
        switch response.result {
        case .success(let user):
            completion(user, nil)
        case .failure(let error):
            completion(nil, error)
        }
    }
}

Alamofire.request를 사용하여 네트워크 요청을 보내고, responseObject 메서드를 사용하여 응답을 User 객체로 매핑합니다. 성공적인 응답인 경우에는 매핑된 User 객체를 completionHandler로 전달하고, 실패한 경우에는 에러를 전달합니다.

네트워크 응답 처리

네트워크 응답을 처리하기 위해서는 위에서 작성한 User 클래스를 사용해야 합니다. 네트워크 요청에서 받은 User 객체를 다른 곳에서 사용하려면 적절한 처리를 해주어야 합니다. 예를 들어 사용자의 이름과 나이를 출력하는 코드는 다음과 같습니다.

fetchUser { (user, error) in
    if let user = user {
        print("Name: \(user.name ?? "")")
        print("Age: \(user.age ?? 0)")
    } else if let error = error {
        print("Error: \(error.localizedDescription)")
    }
}

fetchUser 메서드를 호출하고 응답을 전달받은 후, User 객체의 속성을 사용하여 필요한 처리를 수행합니다. 예제에서는 사용자의 이름과 나이를 출력하는 간단한 예시입니다.

결론

Swift ObjectMapper를 사용하면 JSON 데이터와 객체 간의 매핑을 쉽게 처리할 수 있습니다. 이 라이브러리를 사용하여 네트워크 요청과 응답을 처리하면 객체를 효율적으로 다룰 수 있고, 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.

참고 자료