[Swift] async await로 Google 서버 시간 가져오기
오늘은 Swift로 작성된 GoogleServerTimeService
클래스를 작성했다. 이 코드는 Google 서버의 현재 시간을 가져오는 기능을 간단하게 구현했다.
커스텀 에러 처리
코드에서 정의된 GoogleServerTimeServiceError
열거형을 통해, 다양한 에러 상황에 대응하는 방법을 제공한다. 이러한 방식은 오류 발생 시 명확한 정보를 제공하며, 에러 관리를 더욱 체계적으로 할 수 있게 한다.
날짜 포맷터의 재사용
DateFormatter
를 static
프로퍼티로 선언함으로써, 메모리 효율성과 성능을 개선한다. 이렇게 재사용 가능한 컴포넌트를 만들어두면, 앱의 전반적인 성능에 긍정적인 영향을 준다.
import Foundation
enum GoogleServerTimeServiceError: Error {
case invalidURL
case invalidResponse
case networkError(Error)
}
final class GoogleServerTimeService {
private static let dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
formatter.locale = Locale(identifier: "en-US")
return formatter
}()
func serverTime() async throws -> Date {
guard let url = URL(string: "https://www.google.com") else {
throw GoogleServerTimeServiceError.invalidURL
}
do {
let (_, response) = try await URLSession.shared.data(from: url)
guard let httpURLResponse = response as? HTTPURLResponse,
let dateString = httpURLResponse.allHeaderFields["Date"] as? String,
let serverTime = GoogleServerTimeService.dateFormatter.date(from: dateString) else {
throw GoogleServerTimeServiceError.invalidResponse
}
return serverTime
} catch {
throw GoogleServerTimeServiceError.networkError(error)
}
}
}
테스트 및 예외 상황 고려에 대한 필요성이 있다. 이 코드가 실제로 어떻게 동작하는지 테스트하는 것이 중요하다. 예외 상황에 대한 처리도 충분히 고려되었는지 확인해야 한다.
댓글남기기