스팀 앱 개발기 #29 - 뷰모델, Repository 패턴 그리고 Use Case 패턴의 관계

지금까지 condenser_api.get_accounts API를 연동하는 과정에서 Repository 패턴과 Use Case 패턴을 구현했습니다. 설명을 드리지는 않았지만, 스팀 앱 개발기를 연재하는 초반에서는 ViewModel 패턴도 사용되고 있습니다. 이 세 패턴들의 관계를 이해해야 안드로이드 앱의 클린 아키텍처를 구축할 수 있습니다. 이번 포스트에서는 이 패턴들을 간단히 설명하고 이들의 관계가 어떻게 되는지를 간단히 정리해 보고자 합니다.


ViewModel 패턴

뷰(view)는 사용자에게 보여줄 화면 그리고 이를 구성하는 요소들을 의미하구요. 뷰모델(ViewModel)은 뷰에 필요한 데이터 그리고 이를 다루는 로직이 구현되는 곳입니다.

예전에는 액티비티 클래스 안에 뷰, 데이터, 로직을 모두 정의, 구현하는 방식이 사용되었지만, 그것은 액티비티가 너무 거대해지고 복잡해지는 문제가 있었습니다. 이를 분화하기 위한 디자인 패턴들이 만들어졌고, 그 과정에서 MVP, MVVM 패턴이 활용되었습니다. MVP 패턴이 사용되었다가 지금은 MVVM 패턴을 쓰는 것이 보편화되고 있습니다. 이제 액티비티는 뷰에 해당되고, 가능한 화면에 보여주는 역할만 수행하게끔 개발하는 것이 좋습니다.


Repository 패턴

Repository가 우리말로는 '저장소'죠. 데이터가 저장된 곳을 의미합니다. 저장소로부터 우리는 데이터를 읽을 수 있고, 반대로 기록도 할 수 있습니다. Repository 패턴은 데이터를 읽고 쓰는 역할을 담당합니다.

뷰모델이 Repository 객체를 통해 데이터를 읽고 쓰는 것이 가능합니다. 그러나 클린 아키텍처에서는 이 둘을 직접 연결하기보다는 중간에 Use Case 객체를 통해 간접 연결하는 것을 권합니다.


Use Case 패턴

클린 아키텍처에서 Use Case 패턴은 특정 데이터를 읽거나 쓰기를 Repository 객체에 요청하는 역할을 담당합니다. 예를 들면요. Repository 객체에 condenser_api.get_accounts API 실행을 요청할 수 있는 것입니다.

Use Case 객체는 뷰모델 객체가 사용합니다. 이 패턴을 사용하면요. 뷰모델이 사용할 수 있는 API 또는 DB 접근의 범위를 명확하게 제한할 수 있습니다. 뷰모델이 Repository 객체에 직접 접근하기보다는 Use Case 객체를 통해 간접 접근하는 것이 처음에는 복잡해 보일 수 있지만, 장기적으로는 유지보수에 더 낫다고 볼 수 있습니다.


마치며...

다음 포스트에서는 뷰모델 객체가 Use Case 객체를 통해 condenser_api.get_accounts API를 실행하고 사용자의 지갑 정보를 읽는 코드를 구현할 예정입니다.


지난 스팀 앱 개발기

Sort:  
 3 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.10
TRX 0.32
JST 0.032
BTC 113010.73
ETH 4120.40
USDT 1.00
SBD 0.67