[swift] 제네릭을 사용하여 네트워크 통신을 어떻게 구현하는가?

이번에는 Swift에서 제네릭을 사용하여 네트워크 통신을 구현하는 방법에 대해 알아보겠습니다.

제네릭을 이용한 네트워크 통신 구현

Swift에서 제네릭을 사용하여 네트워크 통신을 구현하기 위해서는 Generics를 활용한 API 클라이언트를 만들 수 있습니다. 제네릭을 사용하여 여러 종류의 데이터를 다룰 수 있으므로, 유연하고 재사용 가능한 네트워크 코드를 작성할 수 있습니다.

다음은 제네릭을 사용하여 네트워크 통신을 구현하는 간단한 예제 코드입니다.

import Foundation

enum NetworkError: Error {
    case invalidURL
    case noData
    // 기타 네트워크 에러 케이스들
}

struct APIClient {
    let baseURL: URL
    
    init(baseURL: URL) {
        self.baseURL = baseURL
    }
    
    func request<T: Decodable>(endpoint: String, completion: @escaping (Result<T, Error>) -> Void) {
        guard let url = URL(string: endpoint, relativeTo: baseURL) else {
            completion(.failure(NetworkError.invalidURL))
            return
        }
        
        let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
            if let error = error {
                completion(.failure(error))
                return
            }

            guard let data = data else {
                completion(.failure(NetworkError.noData))
                return
            }

            do {
                let decodedResponse = try JSONDecoder().decode(T.self, from: data)
                completion(.success(decodedResponse))
            } catch {
                completion(.failure(error))
            }
        }
        task.resume()
    }
}

위의 코드는 제네릭을 이용하여 네트워크 통신을 구현하는 간단한 예제입니다. APIClient는 baseURL과 request 메서드를 가지고 있으며, request 메서드는 제네릭을 이용하여 Decodable한 타입을 받아와서 네트워크 통신을 수행하고 결과를 반환합니다.

이와 같이 제네릭을 활용하여 네트워크 통신을 구현하면, 다양한 형태의 데이터를 처리할 수 있고, 코드의 재사용성과 유연성을 높일 수 있습니다.

위의 예제 코드를 참고하여 제네릭을 이용한 네트워크 통신을 구현해 보시기 바랍니다.

참고 자료