[swift] Swift에서 Reachability 구현하기

소개

Reachability는 iOS 앱에서 네트워크 연결의 상태를 감지하기 위한 유용한 도구입니다. 네트워크 연결 상태를 감지할 수 있으면 앱이 적절하게 대응하고 사용자에게 피드백을 제공할 수 있습니다.

이 글에서는 Swift에서 Reachability를 구현하는 방법에 대해 알아보겠습니다.

Reachability 클래스 구현하기

Reachability를 구현하기 위해서는 Reachability라는 클래스를 만들어야 합니다. 이 클래스는 네트워크 연결 상태를 감지하는 기능을 담당합니다.

먼저, Reachability.swift 파일을 생성하고 아래의 코드를 추가합니다.

import Foundation
import SystemConfiguration

class Reachability {

    static func isConnectedToNetwork() -> Bool {
        var zeroAddress = sockaddr_in()
        zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)
        
        guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
            $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
                SCNetworkReachabilityCreateWithAddress(nil, $0)
            }
        }) else {
            return false
        }
        
        var flags: SCNetworkReachabilityFlags = []
        if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
            return false
        }
        
        let isReachable = flags.contains(.reachable)
        let needsConnection = flags.contains(.connectionRequired)
        
        return (isReachable && !needsConnection)
    }
}

위의 코드는 네트워크 연결 상태를 감지하는 isConnectedToNetwork()라는 정적 메서드를 포함한 Reachability 클래스를 정의합니다. 이 메서드는 현재의 네트워크 연결 상태에 따라 true 또는 false를 반환합니다.

Reachability 사용하기

이제 Reachability 클래스를 사용하여 네트워크 연결 상태를 확인할 수 있습니다. 예를 들어, 네트워크가 연결되어 있는지 확인하고 연결이 끊어졌을 경우에는 사용자에게 알림을 보여주는 기능을 구현해보겠습니다.

if Reachability.isConnectedToNetwork() {
    // 네트워크가 연결되어 있는 경우에는 추가 작업을 수행합니다.
    print("네트워크 연결됨")
} else {
    // 네트워크가 연결되어 있지 않은 경우에는 사용자에게 알림을 보여줍니다.
    let alertController = UIAlertController(title: "알림", message: "네트워크에 연결되어 있지 않습니다.", preferredStyle: .alert)
    let okAction = UIAlertAction(title: "확인", style: .default, handler: nil)
    alertController.addAction(okAction)

    // 현재 화면의 루트 뷰 컨트롤러에 알림을 표시합니다.
    UIApplication.shared.keyWindow?.rootViewController?.present(alertController, animated: true, completion: nil)
}

위의 코드에서는 Reachability 클래스의 isConnectedToNetwork() 메서드를 사용하여 현재의 네트워크 연결 상태를 확인합니다. 연결되어 있는 경우에는 “네트워크 연결됨”이라는 메시지가 출력되고, 연결되어 있지 않은 경우에는 UIAlertController를 사용하여 사용자에게 알림을 보여줍니다.

결론

Swift에서 Reachability를 구현하는 방법에 대해 알아보았습니다. 이러한 네트워크 연결 상태를 감지하는 기능을 통해 앱은 네트워크가 연결되어 있는지 여부에 따라 적절한 대응을 할 수 있습니다.