[swift] 네트워크 요청을 처리하는 데이터 타입

Swift에서는 다양한 방법으로 네트워크 요청을 처리할 수 있습니다. 네트워크 요청을 보내고 받는 데이터를 효율적으로 다루기 위해 Swift에서는 몇 가지 데이터 타입을 제공합니다.

URL

네트워크 요청을 보내기 위해서는 URL이 필요합니다. Swift에서는 URL 타입을 사용하여 URL을 다룰 수 있습니다. URL 타입은 Foundation 프레임워크에 포함되어 있으며, 다양한 메서드와 속성을 제공합니다. 예를 들어, URL(string: "https://www.example.com")과 같이 URL을 초기화하거나, URLComponents를 사용하여 쿼리 매개변수를 조작할 수도 있습니다.

URLSession

네트워크 요청을 보내고 받기 위해서는 URLSession을 사용합니다. URLSessionFoundation 프레임워크에 포함되어 있으며, 네트워크 작업을 관리하는 객체입니다. URLSession을 사용하여 GET 또는 POST와 같은 HTTP 메서드를 사용하여 요청을 보낼 수 있습니다. 또한, 요청에 대한 응답을 다루기 위해 URLSessionDelegate를 구현할 수도 있습니다.

let url = URL(string: "https://www.example.com")!
let session = URLSession.shared

let task = session.dataTask(with: url) { (data, response, error) in
    if let error = error {
        print("Error: \(error.localizedDescription)")
        return
    }
    
    guard let data = data else {
        print("No data received")
        return
    }
    
    // 데이터 처리 로직
}

task.resume()

위의 예제에서는 URLSession.shared.dataTask(with: completionHandler:) 메서드를 사용하여 GET 요청을 보냅니다. 이후 응답을 처리하는 로직은 completionHandler 클로저 내부에서 처리합니다.

JSONSerialization

네트워크 요청을 통해 받은 데이터는 주로 JSON 형식일 것입니다. 이러한 JSON 데이터를 다루기 위해 Swift에서는 JSONSerialization을 사용할 수 있습니다. JSONSerialization은 JSON 데이터를 Swift의 DictionaryArray 타입으로 변환할 수 있습니다.

let json = """
{
    "name": "John Doe",
    "age": 30,
    "email": "johndoe@example.com"
}
"""

if let jsonData = json.data(using: .utf8) {
    do {
        let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: [])
        if let dictionary = jsonObject as? [String: Any] {
            let name = dictionary["name"] as? String
            let age = dictionary["age"] as? Int
            let email = dictionary["email"] as? String
            print("Name: \(name ?? "")")
            print("Age: \(age ?? 0)")
            print("Email: \(email ?? "")")
        }
    } catch {
        print("Error: \(error.localizedDescription)")
    }
}

위의 예제에서는 json 문자열을 data(using:) 메서드를 이용하여 Data 타입으로 변환한 후, JSONSerialization.jsonObject(with:options:) 메서드를 사용하여 데이터를 Dictionary로 변환합니다. 이후 딕셔너리에서 원하는 값을 얻어 출력합니다.

이러한 방식으로 Swift에서는 다양한 데이터 타입을 활용하여 네트워크 요청을 처리하고 데이터를 다룰 수 있습니다.

참고 자료