Swift는 iOS 애플리케이션 개발을 위한 강력한 프로그래밍 언어입니다. Swift를 사용하여 HTTP 요청을 보내고 응답을 받는 방법에 대해 알아보겠습니다.
URLSession을 이용한 HTTP 요청
Swift에서는 URL 요청을 보내기 위해 URLSession
을 사용합니다. URLSession
은 앱이 비동기적으로 네트워크 작업을 수행할 수 있도록 해줍니다.
let url = URL(string: "https://api.example.com/data")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if let error = error {
print("Error: \(error)")
return
}
if let data = data {
let responseString = String(data: data, encoding: .utf8)
print("Response: \(responseString)")
}
}
task.resume()
위의 코드에서는 URLSession.shared.dataTask(with:completionHandler:)
메서드를 사용하여 데이터를 얻기 위한 GET 요청을 보냅니다. 응답 데이터를 처리하기 위한 completionHandler 클로저를 사용합니다.
JSON 파싱
이제 HTTP 응답에서 JSON 데이터를 추출하는 방법을 알아보겠습니다. Swift에서는 Codable
프로토콜을 사용하여 JSON 데이터를 쉽게 파싱할 수 있습니다.
struct ResponseData: Codable {
let id: Int
let name: String
let age: Int
}
...
if let data = data {
do {
let decoder = JSONDecoder()
let responseData = try decoder.decode(ResponseData.self, from: data)
print("Name: \(responseData.name)")
} catch {
print("Error: \(error)")
}
}
위의 코드에서는 ResponseData
라는 구조체를 정의하고 Codable
프로토콜을 준수하도록 만듭니다. JSONDecoder
를 사용하여 응답 데이터를 ResponseData
객체로 디코딩합니다.
오류 처리
HTTP 요청에서 오류를 처리하는 방법도 중요합니다. Swift에서는 Error
프로토콜에 준수하는 오류 타입을 정의하여 오류를 처리할 수 있습니다.
enum APIError: Error {
case requestFailed
case invalidData
case jsonParsingFailure
}
...
if let error = error {
print("Error: \(error)")
// 오류 처리
return
}
if let data = data {
do {
let decoder = JSONDecoder()
let responseData = try decoder.decode(ResponseData.self, from: data)
print("Name: \(responseData.name)")
} catch {
print("Error: \(error)")
// 오류 처리
}
}
위의 코드에서는 APIError
라는 열거형을 정의하고 Error
프로토콜을 준수하도록 만듭니다. 오류가 발생할 경우 해당 오류 타입을 사용하여 상황에 맞게 처리할 수 있습니다.
결론
Swift를 사용하여 HTTP 요청을 보내고, 응답을 받는 방법에 대해 알아보았습니다. URLSession을 사용하여 요청을 보낼 수 있으며, Codable 프로토콜을 이용하여 JSON 데이터를 쉽게 파싱할 수 있습니다. 오류 처리도 중요하므로 적절한 오류 타입을 정의하고 처리하는 것이 좋습니다.