본문 바로가기

Android 개인공부

Repository Pattern

반응형
  • 정의 : 데이터 출처(로컬DB, 서버 API 응답)와 관계 없이 동일 인터페이스로 데이터에 접속할 수 있도록 하는 디자인 패턴
  • 발생배경
    • 비즈니스 로직은 프로그램의 핵심이 되는 요소이며 보통 데이터베이스나 웹서비스 등의 데이터 저장소에 접근하게 되는데 이 과정에서 여러 문제가 발생(중복코드, 오류 발생 가능성의 코드, 오타, 유닛 테스트 어려움) 함에 따라 몇가지 요구사항이 발생
      1. 비즈니스 로직과 데이터 레이어를 분리
      2. 중앙 집중 처리 방식을 통해 일관된 데이터와 로직을 제공해야 함
       
반응형

Repository Pattern
Repository Pattern In Android

  • 특징
    • 데이터가 있는 여러 저장소를 추상화하여 중앙 집중 처리 방식을 구현
    • 데이터를 사용하는 도메인에서는 비즈니스 로직에만 집중할 수 있음
      • ex) ViewModel에서는 데이터가 로컬 DB에서 오는지, 서버 API 응답값에서 오는지 출처를 몰라도 됨, Repository를 참조하여 제공해주는 데이터를 이용하기만 하면됨
    • Repository가 추상화 되어 있으므로 항상 같은 인터페이스로 데이터를 요청할 수 있음
  • 장점
    • 데이터 로직과 비즈니스 로직을 분리할 수 있음
    • 도메인에서는 일관된 인터페이스를 통해 데이터를 요청
    • 데이터 저장소의 데이터를 캡슐화 (객체지향적인 프로그래밍에 적합)
    • 단위 테스트를 통한 검증 가능
    • 객체 간의 결합도 감소
  • 예제 코드
interface SearchUserRepository {
    fun searchUsers(
        searchUserId: String
    ): Flow<SearchUsersResponse>
}
interface SearchUserRepository {
    fun searchUsers(
        searchUserId: String
    ): Flow<SearchUsersResponse>
}
class MainViewModel(
    private val searchUserRepository: SearchUserRepository
) : BaseViewModel() {
  
    private val _userList = MutableLiveData<MutableList<SearchResult>>()
    val userList: LiveData<MutableList<SearchResult>> = _userList

    private var job: Job? = null

    fun searchUsers(searchId: String) {
        if (beforeQuery != searchId) {
            job?.cancel()
            job = viewModelScope.launch {
                _isLoading.value = true
                beforeQuery = searchId

                searchUserRepository.searchUsers(searchId)
                    .flowOn(Dispatchers.IO)
                    .collect { response ->
                        _userList.value = checkFavoriteList(response)
                    }
            }
        }
    }
}
  • 예제 코드

https://github.com/welcome2c

 

welcome2c - Overview

Android Developer Being Best. welcome2c has 11 repositories available. Follow their code on GitHub.

github.com

  • 참고 사이트

https://heegs.tistory.com/90?category=915533

 

[Android] Repository Pattern

디자인 패턴을 살펴보던 도중, Repository Pattern을 적용해본적은 있지만 정리를 하지 않았던 것을 발견하여 간단하게 정리를 하면서 글을 작성해보고자 한다. Clean Architecture 예제를 확인해보면 repos

heegs.tistory.com

https://4z7l.github.io/2020/11/24/repository-pattern.html#발생-배경

 

[Design Pattern] Repository Pattern 이란 - HERSTORY

개요 발생 배경 비즈니스 로직은 프로그램의 핵심이 되는 요소이며, 비즈니스 로직을 잘 짜야 원하는 결과를 올바르게 도출할 수 있다. 이때 비즈니스 로직은 보통 데이터베이스나 웹서비스 등

4z7l.github.io

https://eunjin3786.tistory.com/198

 

[Design Pattern] Repository패턴이란

[1] Repository 패턴이란 데이터 출처(로컬 DB인지 API응답인지 등)와 관계 없이 동일 인터페이스로 데이터에 접속할 수 있도록 만드는 것을 Repository 패턴이라고 합니다. - viewModel 밑에 Repos..

eunjin3786.tistory.com

 

 

반응형

'Android 개인공부' 카테고리의 다른 글

Coroutine 1부  (0) 2022.08.18
MVVM  (0) 2022.07.21
Android Custom Progress Dialog  (0) 2021.06.12
AAC LifeCycles  (0) 2020.12.16
Kotlin?  (0) 2020.11.26