[swift] Reachability를 사용해 인터넷 연결 상태가 변경되는 경우 적절한 동작 수행하기

소개

앱 개발 중에는 사용자의 인터넷 연결 상태를 확인하고, 연결 상태에 따른 적절한 동작을 수행해야 할 때가 있습니다. 이를 위해 ‘Reachability’ 라이브러리를 사용하여 인터넷 연결 상태를 감지하고, 변경되는 경우에 대한 처리를 구현할 수 있습니다. 이 글에서는 Swift 언어를 사용하여 Reachability 라이브러리를 활용하는 방법에 대해 알아보겠습니다.

Reachability 라이브러리 설치

Reachability 라이브러리를 사용하기 위해서는 먼저 프로젝트에 해당 라이브러리를 추가해야 합니다. 가장 쉽게 Reachability 라이브러리를 설치하는 방법은 CocoaPods를 사용하는 것입니다. 해당 프로젝트의 Podfile에 다음과 같이 Reachability를 추가합니다.

pod 'ReachabilitySwift'

그리고 터미널을 열어서 프로젝트의 루트 폴더로 이동한 후, 다음 명령어를 실행하여 Reachability를 설치합니다.

$ pod install

이제 Reachability 라이브러리를 사용할 준비가 끝났습니다.

Reachability 설정하기

Reachability를 사용하기 위해 먼저 Reachability.swift 파일을 프로젝트에 추가해야 합니다. Reachability 라이브러리는 인터넷 연결 상태를 감지하기 위해 네트워크 정보를 사용합니다. 앱이 시작될 때 Reachability 인스턴스를 생성하고, NotificationCenter를 이용하여 네트워크 변경 이벤트를 구독해야 합니다.

다음은 Reachability를 설정하는 코드 예시입니다.

import Reachability

class ViewController: UIViewController {

    let reachability = try! Reachability()

    override func viewDidLoad() {
        super.viewDidLoad()

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

        do {
            try reachability.startNotifier()
        } catch {
            print("Reachability notifier failed to start")
        }
    }

    @objc func reachabilityChanged(_ notification: Notification) {
        let reachability = notification.object as! Reachability

        switch reachability.connection {
        case .wifi:
            print("Wifi 연결")
            // 인터넷 연결 상태가 변경되었을 때 수행할 동작
        case .cellular:
            print("셀룰러 연결")
            // 인터넷 연결 상태가 변경되었을 때 수행할 동작
        case .unavailable:
            print("인터넷 연결 불가능")
            // 인터넷 연결 상태가 변경되었을 때 수행할 동작
        case .none:
            print("연결 없음")
            // 인터넷 연결 상태가 변경되었을 때 수행할 동작
        }
    }
}

위 코드에서는 ViewController에 Reachability 인스턴스를 생성하고, viewDidLoad() 메서드에서 NotificationCenter를 사용하여 reachabilityChanged(:), 즉 네트워크 변경 이벤트를 수신할 메서드를 구독하고 있습니다. reachabilityChanged(:) 메서드에서는 인터넷 연결 상태에 따라 적절한 동작을 수행할 수 있도록 코드를 작성할 수 있습니다.

참고 자료