[swift] 클로저의 활용 예시: 서버 요청 및 응답 처리

클로저는 스위프트에서 강력하게 활용되는 개념 중 하나입니다. 클로저를 이용하면 비동기적인 작업을 처리하거나, 코드 블록을 다른 함수에 전달하여 실행할 수 있습니다. 이번 블로그 포스트에서는 클로저를 사용하여 서버 요청과 응답 처리를 위한 예시를 살펴보겠습니다.

서버 요청

서버에 요청을 보내기 위해서는 일반적으로 HTTP 요청을 보내야 합니다. Swift의 URLSession을 사용하여 간단한 GET 요청을 보내는 예시를 살펴보겠습니다.

let url = URL(string: "http://www.example.com/api/data")!

let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
    if let error = error {
        print("Error: \(error)")
        return
    }
    
    guard let data = data else {
        print("No data received")
        return
    }
    
    // 서버 응답 처리
    let responseString = String(data: data, encoding: .utf8)
    print("Response: \(responseString)")
}

task.resume()

위의 코드에서는 URLSession.shared.dataTask(with: completionHandler:) 메서드를 사용하여 URL로 GET 요청을 보냅니다. 클로저를 사용하여 응답을 처리하고, 에러가 발생한 경우에도 처리할 수 있습니다.

서버 응답 처리

서버 응답을 받은 후에는 해당 응답을 적절히 처리해야 합니다. 예를 들어, JSON 형식의 응답을 받은 경우에는 JSONSerialization을 사용하여 JSON을 파싱하고 원하는 데이터를 추출할 수 있습니다. 다음은 서버에서 받은 JSON 응답을 처리하는 예시입니다.

guard let jsonData = data else {
    print("No data received")
    return
}

do {
    let json = try JSONSerialization.jsonObject(with: jsonData, options: [])
    if let dict = json as? [String: Any] {
        // 추출할 데이터의 키에 맞게 처리
        let name = dict["name"] as? String
        let age = dict["age"] as? Int
        
        // 데이터 사용
        print("Name: \(name ?? "")")
        print("Age: \(age ?? 0)")
    }
} catch {
    print("JSON parsing error: \(error)")
}

위의 코드에서는 JSONSerialization.jsonObject(with: options:) 메서드를 사용하여 JSON 데이터를 파싱하고, 추출한 데이터를 사용하는 예시입니다. 이렇게 클로저를 활용하여 서버 응답을 처리할 수 있습니다.

결론

클로저는 스위프트에서 다양한 상황에서 활용될 수 있는 강력한 개념입니다. 이번 포스트에서는 클로저를 사용하여 서버 요청과 응답 처리를 예시로 살펴보았지만, 클로저는 비동기적인 작업이나 코드 블록을 다른 함수에 전달하는데에도 많이 사용됩니다. 클로저에 대해 더 많이 학습하고, 스위프트 개발에 활용해보세요!


참고 자료: