[swift] Reachability를 사용해 인터넷 연결 상태에 따른 캐시 삭제하기

앱에서는 인터넷 연결 상태에 따라 다른 동작을 수행해야 하는 경우가 많습니다. 특히, 오프라인 상태에서는 캐시를 사용하여 데이터를 표시하고, 온라인 상태에서는 서버에서 최신 데이터를 가져와 업데이트해야합니다. 이를 위해 Reachability를 사용하여 인터넷 연결 상태를 확인하고, 연결 상태에 따라 캐시를 삭제하는 방법을 알아보겠습니다.

Reachability 라이브러리 추가하기

Reachability를 사용하기 위해서는 Reachability 라이브러리를 프로젝트에 추가해야 합니다. 라이브러리는 CocoaPods를 통해 간편하게 설치할 수 있습니다. Podfile에 다음과 같이 Reachability를 추가해주세요.

pod 'ReachabilitySwift'

그리고 터미널에서 다음 명령어로 라이브러리를 설치합니다.

pod install

Reachability 설정하기

Reachability를 사용하기 위해서는 Reachability.swift 파일을 추가해야 합니다. 파일은 ReachabilitySwift Github 저장소에서 다운로드할 수 있습니다. 다운로드한 파일을 프로젝트에 추가한 후, 해당 파일을 사용할 클래스에 import 문을 추가합니다.

import ReachabilitySwift

Reachability로 인터넷 연결 상태 확인하기

Reachability를 사용하여 인터넷 연결 상태를 확인하려면, 다음과 같이 Reachability 객체를 초기화해야 합니다. 주로 뷰 컨트롤러의 viewDidLoad() 메서드에서 초기화하는 것이 일반적입니다.

let reachability = Reachability()!

override func viewDidLoad() {
    super.viewDidLoad()
    
    // Reachability 설정
    setupReachability()
    
    // Observer 등록
    NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged), name: ReachabilityChangedNotification, object: reachability)
    
    // Reachability 시작
    do {
        try reachability.startNotifier()
    } catch {
        print("Unable to start notifier")
    }
}

인터넷 연결 상태를 확인하기 위해 Reachability 객체를 초기화하고, Observer를 등록하고, Reachability를 시작합니다. Observer는 reachabilityChanged(_:) 메서드를 호출하도록 설정합니다.

인터넷 연결 상태 변화 처리하기

Reachability 객체를 초기화하고 Observer를 등록하면, 인터넷 연결 상태에 변화가 생기면 reachabilityChanged(_:) 메서드가 호출됩니다. 이 메서드에서 연결 상태에 따른 캐시 삭제 작업을 수행합니다.

@objc func reachabilityChanged(notification: NSNotification) {
    let reachability = notification.object as! Reachability
    
    if reachability.isReachable {
        // 인터넷 연결됨
        print("인터넷 연결됨. 캐시 유지")
    } else {
        // 인터넷 연결 끊김
        print("인터넷 연결 끊김. 캐시 삭제")
        clearCache()
    }
}

reachabilityChanged(_:) 메서드에서는 Reachability 객체를 통해 현재 연결 상태를 확인하고, 연결이 되어있을 경우에는 캐시를 유지하고, 연결이 끊겼을 경우에는 캐시를 삭제하는 clearCache() 메서드를 호출합니다.

캐시 삭제 구현하기

인터넷 연결이 끊겼을 때 캐시를 삭제하기 위해 clearCache() 메서드를 구현해야 합니다. 캐시 삭제 방법은 사용하는 라이브러리나 방식에 따라 다를 수 있으므로, 해당 방법을 사용하시면 됩니다.

func clearCache() {
    // TODO: 캐시 삭제 로직 구현
    // 예시: SDWebImage 라이브러리를 사용하는 경우
    SDImageCache.shared.clearMemory()
    SDImageCache.shared.clearDisk()
}

clearCache() 메서드에서는 해당하는 캐시 라이브러리의 메서드를 호출하여 캐시를 삭제합니다. 위 예시는 SDWebImage 라이브러리의 캐시 삭제 방법을 보여주고 있습니다.

결론

Reachability를 사용하여 인터넷 연결 상태를 확인하고, 연결 상태에 따라 캐시를 삭제하는 방법에 대해 알아보았습니다. 캐시를 사용하는 앱에서는 인터넷 연결 상태에 따른 적절한 동작을 수행하여 사용자 경험을 개선할 수 있습니다. Reachability를 활용하여 네트워크 상태를 감지하고, 알맞은 대응을 취할 수 있도록 코드를 구현해보세요.

참고: ReachabilitySwift Github 저장소