안드로이드 개발자 문서를 참조하셔서 구현에 필요한 요소들을 익히시기 바랍니다.
https://developer.android.com/topic/architecture/data-layer/offline-first
Youtube 에 Android offline first architecure로 검색하셔서 관련된 비디오를 훑어보시거나 위의 문서의 저자의 동영상을 확인해 보세요.
https://www.youtube.com/watch?v=jaZ2gLMGUsM
핵심적인 포인트만 짚어드리자만, 네트워크 호출 시, 먼저 로컬 저장소(DB 같은 곳)을 체크해서 데이터가 있으면 이걸 먼저 리턴하고, 없다면 네트워크 호출을 합니다. 네트워크 호출이 성공하면 결과값을 로컬에 저장하고 UI에 업데이트 된 내용을 알려줍니다.
디바이스 캐시를 구현하시는 거라고 보시면 되구요, 캐시 정책을 만들어서 어떤 조건에서 로컬 데이터와 상관없이 강제로 네트워크에서 데이터를 다시 가져오게 할지 업무 요구사항에 맞게 정하셔서 구현하시는게 중요한 포인트 중의 하나입니다.
로컬저장소로는 Room을 많이 사용합니다. 주된 이유는 Room이 RxJava, LiveData, Flow같은 Observable 타입을 지원하기 때문에 변경이 있을 시 자동으로 통보를 받을 수 있습니다. Room의 이런 점이 필요하시면 사용하시면 되고, 그렇지 않다면 대체할 만한 걸 찾아보시면 됩니다.