오늘은 많은 사람들이 애용하는 디자인패턴 중 하나인 Repository 패턴이다.
1. Repository Pattern이란?
ViewModel(Domain layer)과 Data 저장소 사이인 Data layer에 중간 계층(Repository)을 만들어
데이터의 출처에 구애받지 않고 동일한 인터페이스로 접근할 수 있게 만드는 패턴
여기서 동일한 인터페이스로 접근한다 라는 말의 뜻이 잘 이해가 되지 않을 수 있다.
간단한 예시를 들어보겠다.
A라는 내부 DB에서 데이터를 가져오고, 추가적으로 B라는 외부 출처에서도 데이터를 가져와야하는 상황이다.
여기서 우리가 A와 B 둘 모두의 데이터에 접근 및 사용하기 위해서는
A라는 내부 DB에 대한 처리 + B라는 외부 DB 이 둘 모두에 대한 작업이 필요할 것이다.
이 말은 곧, A와 B의 인터페이스가 다르기 때문에 각각에 대한 처리가 필요하다는 말과 같다.
Repository 패턴은 이 불편함을 해소시켜 준다.
각기 다른 두 작업을 따로 수행하는 것보다, 통일된 하나의 인터페이스로 접근이 가능하다면
개발자의 고생이 1/2가 되는 것이다.
2. Repository pattern 구조도
(1) Repository는 ViewModel과 Data Layer 사이에서 중재하는 역할을 한다.
- 내부/외부 데이터 등 모든 데이터를 동일한 인터페이스로 접근할 수 있게 한다.
- "PNG와 JPG의 차이"에 대해 궁금해서 Naver, Daum, Bing 등 모든 검색 엔진에서 검색하는 것은 비효율적이다.
- 모든 곳에서 검색해볼 시간에, Google에서 한 번 검색한다면 훨씬 빠르고 쉽게 찾을 수 있다.
- 이것은 곧 "데이터를 추상화시키는 것"이다.
(2) 여러 ViewModel들은 Repository를 공유함으로써 데이터 일관성을 유지할 수 있다.
- 만약 A라는 내부저장소, B라는 외부저장소를 서로 다른 다수의 ViewModel들이 각각 참조한다면, 그 과정에서 데이터의 일관성을 유지하기란 정말 어려운 일이 될 것이다.
- 데이터가 다양하고 양이 방대해지면.. 상상만 해도 어질어질하다..
(3) 이러한 장점들은 곧 Data Layer로부터 비즈니스 로직을 완벽하게 분리하도록 도와준다
(4) 이것은 곧 "관심사의 분리"이다.
- 넌 너할거 해, 이건 내가 알아서 다 할게. -> 한 가지에 집중할 수 있다.
- 응집도는 올라가고, 객체 간의 결합도는 낮아진다.
(5) 이 모든 장점으로 인해 유지보수에 들어가는 비용이 줄어든다.
개발은 유지보수에서 시작해서 유지보수에서 끝난다. 만드는 것보다 뜯어고치는게 더 힘들다 ㅠㅠ
애초에 설계단계에서부터 클린하게 설계해서 건강한 소프트웨어를 만들 수 있도록
클린 아키텍처를 위해 여러 컴포넌트들을 공부하자!
'개발 > Android' 카테고리의 다른 글
[안드로이드] ViewModel에서 context를 사용하는 방법 (1) | 2023.05.10 |
---|---|
[안드로이드] AAC ViewModel과 MVVM ViewModel (0) | 2023.03.26 |
[안드로이드] Glide를 알아보자 (0) | 2023.01.12 |
RxJava SubscribeOn & ObserveOn (0) | 2022.10.18 |
[안드로이드] START_STICKY & START_NOT_STICKY (0) | 2022.05.24 |