[swift] Swift에서 Codable과 Alamofire를 사용한 JSON 데이터 처리 예제

Swift에서 JSON 데이터를 처리하는 작업은 매우 일반적입니다. Codable 프로토콜은 Swift 4에서 도입된 기능으로, JSON 데이터를 쉽게 구조화된 Swift 객체로 변환하고, 그 반대로도 변환할 수 있게 해줍니다.

또한, Alamofire라는 네트워크 라이브러리를 사용하면 서버에서 JSON 데이터를 가져오는 작업을 간편하게 수행할 수 있습니다.

이번 예제에서는 Swift에서 Codable과 Alamofire를 함께 사용하여 JSON 데이터를 처리하는 방법을 알아보겠습니다.

1. Codable을 준수하는 모델 클래스 정의하기

첫 번째로, JSON 데이터를 처리하기 위해 Codable 프로토콜을 준수하는 모델 클래스를 정의해야 합니다. 예를 들어, 다음과 같은 JSON 데이터를 처리하는 모델 클래스를 만들어보겠습니다:

struct Post: Codable {
    let id: Int
    let title: String
    let body: String
}

위의 코드에서 Post 구조체는 Codable 프로토콜을 준수하며, id, title, body라는 세 개의 프로퍼티를 갖고 있습니다.

2. Alamofire를 사용하여 JSON 데이터 가져오기

앞서 정의한 Post 모델 클래스를 활용하여 Alamofire를 사용하여 JSON 데이터를 가져올 수 있습니다. 다음은 Alamofire를 사용하여 JSON 데이터를 가져오는 예제입니다:

import Alamofire

AF.request("https://api.example.com/posts").responseJSON { response in
    switch response.result {
    case .success(let value):
        if let jsonArray = value as? [[String: Any]] {
            // JSON 데이터를 가져왔을 때 처리할 로직 작성
            let posts = jsonArray.compactMap { Post(json: $0) }
            for post in posts {
                print(post.title)
            }
        }
    case .failure(let error):
        print(error)
    }
}

위 코드에서는 Alamofire의 request 메서드를 사용하여 JSON 데이터를 가져옵니다. 가져온 데이터는 responseJSON 클로저에서 처리되며, 성공적으로 가져왔을 경우 success 케이스에서 JSON 데이터를 처리하는 로직을 작성할 수 있습니다.

3. JSON 데이터를 모델 객체로 변환하기

JSON 데이터를 가져왔다면, Codable 프로토콜을 준수하는 모델 클래스로 변환할 수 있습니다. 이를 위해 다음과 같이 Post 구조체에 init(json:) 메서드를 추가합니다:

extension Post {
    init?(json: [String: Any]) {
        guard let id = json["id"] as? Int,
              let title = json["title"] as? String,
              let body = json["body"] as? String else {
            return nil
        }
        
        self.id = id
        self.title = title
        self.body = body
    }
}

이제 JSON 데이터를 가져올 때마다 Post(json: _)을 호출하여 변환할 수 있습니다.

참고 자료

이 예제는 Codable과 Alamofire를 사용하여 Swift에서 JSON 데이터를 처리하는 기본적인 방법을 보여주었습니다. Codable 프로토콜을 활용하면 JSON 데이터를 구조화된 Swift 객체로 손쉽게 변환할 수 있고, Alamofire를 사용하면 네트워크 작업을 간편하게 처리할 수 있습니다.