네트워크 통신 기초 코딩

import Foundation

// 네트워크 요청을 보낼 함수
func fetchData(from url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> Void) {
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        completion(data, response, error)
    }.resume()
}

// JSON 데이터를 처리할 함수
func processJSONData(data: Data) {
    do {
        let json = try JSONSerialization.jsonObject(with: data, options: [])
        if let jsonArray = json as? [[String: Any]] {
            for item in jsonArray {
                // JSON 데이터 처리 예시
                if let name = item["name"] as? String {
                    print("Name: \\(name)")
                }
                if let age = item["age"] as? Int {
                    print("Age: \\(age)")
                }
                // 필요한 데이터를 처리하는 코드를 추가할 수 있습니다.
            }
        }
    } catch {
        print("Error parsing JSON: \\(error)")
    }
}

// 네트워크 요청 보내기
if let url = URL(string: "<https://api.example.com/data>") {
    fetchData(from: url) { data, response, error in
        if let error = error {
            print("Error fetching data: \\(error)")
            return
        }
        
        guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else {
            print("Invalid response")
            return
        }
        
        if let data = data {
            // 받아온 데이터를 처리
            processJSONData(data: data)
        }
    }
}

requestData 메소드:

  1. requestData 메소드는 네트워크 요청을 보내는 역할을 합니다.
  2. RequestController 인스턴스를 생성하고, 해당 인스턴스가 nil이 아닌지 확인합니다. 만약 nil이라면 네트워크 에러를 처리하고 함수를 종료합니다.
  3. 네트워크 요청을 보내는 makeRequest 메소드를 호출하고, 반환값이 nil이 아닌지 확인합니다. 만약 nil이라면 함수를 종료합니다.
  4. 요청이 성공했을 때, 응답을 받고 그에 따라 처리를 진행합니다.
  5. 요청이 실패했을 때, 네트워크 에러를 처리하고 함수를 종료합니다.

getResultString 메소드:

  1. 이 메소드는 네트워크 응답 데이터를 처리하여 결과 문자열을 반환합니다.
  2. 에러가 발생한 경우, 에러를 처리하고 "9000"을 반환합니다.
  3. 에러가 발생하지 않은 경우, 데이터를 문자열로 변환하고 앞뒤 공백을 제거한 후 반환합니다.

handleNetworkError 메소드:

  1. 이 메소드는 네트워크 에러를 처리합니다.
  2. 에러 메시지를 생성하고, 화면에 경고창을 띄우며 로그를 출력합니다.

requestFinish 메소드:

  1. 이 메소드는 네트워크 요청 완료 후에 실행됩니다.
  2. 결과를 JSON으로 변환하고, 변환에 실패한 경우에는 네트워크 에러를 처리합니다.