[swift] Reachability를 사용해 인터넷 연결 상태 표시를 위한 UI 구현 방법

소개

모바일 앱에서 인터넷 연결 상태를 표시하는 기능은 매우 중요합니다. 사용자에게 현재 인터넷 연결 상태를 알려줌으로써 적절한 대응을 취할 수 있게 해줍니다. 이를 위해 iOS 앱에서는 Reachability 라이브러리를 사용할 수 있습니다. Reachability는 네트워크 연결 상태를 모니터링하고 알려주는 도구로, 인터넷 연결이 활성화되었는지 여부를 신속하게 판단할 수 있습니다. 이번 글에서는 Swift 언어를 사용하여 Reachability를 이용해 인터넷 연결 상태를 표시하는 UI를 구현하는 방법을 알아보겠습니다.

Reachability 라이브러리 가져오기

Reachability 라이브러리는 CocoaPods를 통해 가져올 수 있습니다. Podfile에 다음과 같이 추가합니다.

pod 'ReachabilitySwift'

그리고 터미널에서 다음 명령을 실행하여 라이브러리를 설치합니다.

pod install

Reachability 클래스 구현하기

Reachability 라이브러리를 사용하기 위해 Reachability 클래스를 구현해야 합니다. 다음과 같이 Reachability.swift 파일을 생성하고 아래 코드를 추가합니다.

import Reachability

class NetworkManager {
    static let shared = NetworkManager()
    
    var reachability: Reachability!

    private init() {
        reachability = try! Reachability()
    }

    func startMonitoring() {
        do {
            try reachability.startNotifier()
        } catch {
            print("Could not start reachability notifier")
        }
    }

    func stopMonitoring() {
        reachability.stopNotifier()
    }

    func isNetworkAvailable(completion: @escaping (Bool) -> Void) {
        if reachability.connection != .unavailable {
            completion(true)
        } else {
            completion(false)
        }
    }
}

위의 코드는 NetworkManager라는 싱글톤 클래스를 생성하여 Reachability를 사용하기 위한 초기화 및 감시 기능을 구현한 것입니다. startMonitoring 함수를 호출하여 네트워크 감시를 시작하고, stopMonitoring 함수를 호출하여 감시를 중지할 수 있습니다. isNetworkAvailable 함수를 호출하여 인터넷 연결 상태를 확인할 수 있습니다.

인터넷 연결 상태 표시하기

이제 인터넷 연결 상태를 표시하기 위한 UI를 구현해보겠습니다. ViewController.swift 파일을 열고 다음과 같이 코드를 추가합니다.

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var statusLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        NetworkManager.shared.startMonitoring()

        NotificationCenter.default.addObserver(self, selector: #selector(networkStatusChanged(_:)), name: Notification.Name.reachabilityChanged, object: nil)
    }

    @objc func networkStatusChanged(_ notification: NSNotification) {
        NetworkManager.shared.isNetworkAvailable { [weak self] isAvailable in
            DispatchQueue.main.async {
                self?.updateStatusLabel(isAvailable)
            }
        }
    }

    func updateStatusLabel(_ isNetworkAvailable: Bool) {
        if isNetworkAvailable {
            statusLabel.text = "인터넷에 연결되었습니다."
            statusLabel.textColor = UIColor.green
        } else {
            statusLabel.text = "인터넷 연결이 끊어졌습니다."
            statusLabel.textColor = UIColor.red
        }
    }

    deinit {
        NetworkManager.shared.stopMonitoring()
        NotificationCenter.default.removeObserver(self)
    }
}

위의 코드는 ViewController 클래스에서 Reachability를 사용하여 인터넷 연결 상태를 모니터링하고, 연결 상태에 따라 텍스트 색상과 메시지를 업데이트하는 기능을 구현한 것입니다. viewDidLoad 함수에서 NetworkManager.shared.startMonitoring()을 호출하여 네트워크 감시를 시작하고, networkStatusChanged 함수에서 인터넷 연결 상태가 변경될 때마다 UI를 업데이트합니다. deinit 함수에서는 네트워크 감시를 중지하고 관련된 옵저버를 제거합니다.

결론

Reachability 라이브러리를 사용하여 iOS 앱에서 인터넷 연결 상태를 표시하는 UI를 구현하는 방법에 대해 알아보았습니다. 이를 통해 사용자에게 현재 연결 상태를 시각적으로 알려줌으로써 더 나은 사용자 경험을 제공할 수 있습니다. Reachability 라이브러리를 사용하여 앱의 네트워크 관련 기능을 보완할 수 있으니, 해당 기능을 활용해보시기 바랍니다.

참고 자료