Repository Pattern은 공식문서에 따르면 데이터 레이어를 나머지 부분에서 분리하는 디자인 패턴입니다.
데이터 레이어는 UI와는 별도로 앱의 데이터와 비즈니스 로직을 처리하는 앱 부분을 나타내며 앱의 나머지 부분에서 이 데이터에 액세스할 수 있습니다. 이렇게 되면...

Repository 인터페이스와 구현체를 작성합니다.


그리고 뷰모델 생성자의 매개변수로 Repository구현체를 넘겨주고 Repository의 원하는 함수를 작성합니다.
저희 프로젝트에서는 UseCase 생성자의 매개변수로 넘겨주고 사용하였습니다.


ViewModel이나 앱의 다른 부분은 실제 데이터가 네트워크에서 가져오는지 로컬 데이터베이스에서 가져오는지 알 필요가 없으므로, Repository 클래스를 사용해 ViewModel 클래스와 분리하면 앱 구조를 깔끔하게 유지할 수 있습니다.
1. 데이터 액세스와 비즈니스 로직의 분리: Repository는 데이터 액세스 인터페이스를 제공하여 비즈니스 로직 계층과 데이터 액세스 계층을 분리합니다. 이를 통해 비즈니스 로직은 데이터 소스의 세부 사항을 몰라도 데이터를 쉽게 요청하고 저장할 수 있습니다.
2. 테스트 용이성: Repository가 인터페이스로 추상화되어 있어 테스트하기 쉽습니다. 가짜 또는 메모리 기반 데이터 소스로 Repository를 구현하여 테스트 환경에서 유연하게 사용할 수 있습니다.
3. 확장성: Repository는 데이터 액세스 계층을 캡슐화하여 다른 데이터 소스(예: 네트워크, 로컬 데이터베이스)로의 전환이나 새로운 데이터 소스 추가가 용이합니다.
4. 데이터 소스 관리 및 오프라인 지원: Repository는 네트워크와 로컬 캐시를 포함한 여러 데이터 소스를 관리하고, 오프라인 상태에서도 최신 데이터에 접근할 수 있도록 합니다.
5. 단일 정보 소스 역할: 앱 데이터의 일관성을 유지하고, 네트워크와 캐시를 통합하여 항상 최신 데이터로 앱이 작동하도록 보장합니다.
결론 모듈식이고 테스트 가능한 구조가 되어 코드 유지보수가 용이하고 유연한 데이터 관리를 구현할 수 있습니다.