[swift] Reachability를 사용해 와이파이 연결 상태에 따른 동작 제어하기

개요

앱에서는 사용자의 장치가 인터넷에 연결되어 있는지 확인하여 적절한 액션을 취할 수 있어야 합니다. 만약 사용자가 와이파이에 연결되어 있지 않은 경우, 네트워크를 사용하는 기능을 일시적으로 비활성화하거나 알림을 표시해 주어야 합니다. 이러한 기능을 구현하기 위해 iOS에서는 Reachability 클래스를 사용할 수 있습니다.

Reachability 클래스 사용하기

Reachability 클래스를 사용하려면, 다음과 같은 단계를 따라야 합니다.

1. Reachability 클래스 가져오기

먼저 Reachability 클래스를 프로젝트에 추가해야 합니다. Reachability 클래스는 iOS에서 제공하는 시스템 프레임워크 중 하나인 SystemConfiguration.framework에 포함되어 있습니다. 프로젝트 네비게이터에서 프로젝트를 선택한 후, “General” 탭을 클릭하여 “Linked Frameworks and Libraries” 섹션으로 이동합니다. “+” 버튼을 클릭하고 “SystemConfiguration.framework”을 추가합니다.

2. Reachability 인스턴스 생성하기

Reachability 클래스의 인스턴스를 생성하기 위해서는 다음과 같은 코드를 작성해야 합니다.

import Reachability

let reachability = try! Reachability()

3. Reachability 감시 시작하기

Reachability 클래스는 현재 네트워크 연결 상태를 감시하고 변경 사항을 알려주는 기능을 제공합니다. 다음과 같은 코드로 감시를 시작할 수 있습니다.

reachability.startNotifier()

4. Reachability 변경 사항 처리하기

Reachability 상태가 변경될 때마다, delegate 패턴을 사용하여 변경 사항을 처리할 수 있습니다. 첫 번째로 Reachability 클래스의 인스턴스에 delegate를 지정해야 합니다. 다음과 같은 코드로 delegate를 지정할 수 있습니다.

reachability.delegate = self

그리고 ReachabilityDelegate 프로토콜을 구현하여 상태 변경에 대한 처리 내용을 작성해야 합니다. 다음은 ReachabilityDelegate 프로토콜의 예시입니다.

import Reachability

class ViewController: UIViewController, ReachabilityDelegate {

    let reachability = try! Reachability()

    override func viewDidLoad() {
        super.viewDidLoad()

        reachability.delegate = self
        reachability.startNotifier()
    }

    func reachabilityDidChangeStatus(_ reachability: Reachability) {
        if reachability.isReachable {
            if reachability.isReachableViaWiFi {
                // 와이파이에 연결되었을 때 동작
            } else {
                // 데이터 네트워크에 연결되었을 때 동작
            }
        } else {
            // 인터넷에 연결되지 않았을 때 동작
        }
    }
}

마무리

Reachability 클래스를 사용하여 앱의 와이파이 연결 상태를 감지하고 적절한 동작을 수행할 수 있습니다. 이를 통해 사용자에게 더 나은 사용 경험을 제공할 수 있습니다. 참고로 Reachability 클래스는 iOS 12부터 사용되지 않으며, Network Framework를 사용하는 것을 권장합니다.

참고 자료