Tech Log

[Design Pattern] Repository Pattern 본문

Design Pattern

[Design Pattern] Repository Pattern

yuhee kim 2023. 3. 30. 08:00

프로젝트를 하면서 Repository Pattern을 사용해보았고, 데이터 레이어를 분리하였을 때 다른 이점이 더 있을까 궁금하여 조사해보았다.

 

해당 글은 안드로이드 플랫폼을 기준으로 기술하였습니다.

 

1. Repository Pattern이란?

출처 : https://developer.android.com/codelabs/basic-android-kotlin-training-repository-pattern?hl=ko#3

데이터 레이어를 분리하는 디자인 패턴이다.

데이터 레이어에는 네트워킹 코드, Room 데이터베이스와 같이 데이터와 관련된 코드들이 들어간다.

UI 부분과는 분리되어 데이터와 비즈니스 로직이 들어간다.

 

출처 : https://developer.android.com/codelabs/basic-android-kotlin-training-repository-pattern?hl=ko#3

안드로이드는 위 그림과 같이 Repository 패턴을 적용하고 있다.

Remote Data Source와 Local Data Source를 추상화하여 중앙 집중 처리 방식을 구현하였다.

이 덕분에 데이터를 사용하는 곳(ViewModel)에서 비즈니스 로직(Repository)에만 집중할 수 있도록 한다.

정보를 은닉하여 코드 변경이 쉬워지도록 한다.

* 비즈니스 로직 : 프로그램의 핵심 로직으로, 어떻게 데이터가 생성되고 수정되고 저장되는 것인지를 정의한 것이다.

 

2. 사용 효과

  • 데이터를 호출하는 코드(ViewModel)에서 오직 비즈니스 로직에만 집중할 수 있도록 한다.

ViewModel에서는 Repository를 참조하여 데이터를 활용하기만 하면 된다.

데이터를 어디서 얻어야 하는지,

어떻게 얻어야 하는지,

데이터를 가공해야 하는지

와 같은 것들을 ViewModel에서 생각하지 않아도 된다.

그냥 Repository의 데이터를 이용하기만 하면 된다.

따라서 코드를 쉽게 유지 보수할 수 있게 된다.

 

다만 ViewModel에서는 다음과 같은 것들을 생각해야 한다.

데이터를 얻는데 오래 걸릴 수도 있고 아닐 수도 있다.

데이터 검색에 실패할 수 있다.

이와 같은 것들은 ViewModel에서 고려해야 한다.

 

  • 테스트에 용이해진다.

객체 간 모듈화가 진행되어 테스트에 유리한 환경이 만들어진다.

 

  • 비즈니스 로직을 변경하기 쉬워진다.

데이터 코드가 Repository에 있기 때문에 ViewModel을 변경하지 않아도 된다.

 

예를 들어 SQLite와 같은 로컬 데이터를 사용하고 있다가, RDBMS로 마이그레이션하는 경우 쉽게 변경할 수 있다.

 

3. 단점

  • 모듈화가 더 진행되기 때문에 관리해야 할 코드가 늘어난다. 복잡해진다.

 

참조

 

 

Comments