Beeeam

App Architecture 본문

Android

App Architecture

Beamjun 2023. 2. 27. 00:18

https://developer.android.com/jetpack/guide?hl=ko 

 

앱 아키텍처 가이드  |  Android 개발자  |  Android Developers

앱 아키텍처 가이드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 가이드에는 고품질의 강력한 앱을 빌드하기 위한 권장사항 및 권장 아키텍처가 포함

developer.android.com

위의 안드로이드 공식문서의 앱 아키텍처 가이드를 기반으로 작성함 

 

 

지금까지 안드로이드 개발을 하면 무지성으로 activity 파일에 기능들을 때려 넣었었다. 사실 이렇게 하면 편하다. 그냥 화면에 맞는 activity 또는 Fragment 파일에 동작할 코드들을 코딩하면 되기 때문이다.

그런데 이런식으로 코딩을 하게되면 나중에 유지, 보수가 어렵다. 이걸 느꼈던게 예전에 했던 프로젝트들의 코드들을 다시 본적이 있었는데 어떤 기능이 어디있는지 찾기 너무 힘들었다. 

최근에 앱 아키텍처를 접하고, 사용해봤는데 코드가 깔끔하게 정리되는 것을 보고 이래서 사용하는구나 라는 생각이 들었다. 그래서 앱 아키텍처에 대해서 정리해보려고 한다.

 

앱 아키텍처

레이어를 역할에 따라서 분리를 한다. 그래서 UI layer, Domain Layer(선택 사용), Data layer로 나누게 된다.

화살표 방향은 해당 레이어로 요청한다는 의미이다.

UI Layer

화면에 애플리케이션의 데이터를 표시하는 역할을 한다. 사용자와의 상호작용(버튼 클릭, 네트워크 응답)으로 인해서 데이터가 변경될 때마다 이 변경사항을 UI는 반영해야한다. UI layer는 UI element와 State Holder로 나누어진다.

UI element

화면에 데이터를 렌더링 하는 UI 요소를 의미한다. 그냥 데이터를 화면에 띄어준다고 생각하자.

ex) xml 파일의 뷰들

State Holders

상태 관련된 데이터를 보유하고 이를 UI에 노출하여 로직을 처리하는 역할을 한다.

ex) ViewHolder

UI element에서 State holders에 요청을 한다.

Data Layer

여기에는 비즈니스 로직이 포함 되어있다. 비즈니스 로직이 뭐냐? 앱에 가치를 부여하는 요소로 앱의 데이터 생성, 저장, 변경 방식을 결정하는 규칙으로 구성이 된다. 

Data layer는 데이터 소스를 포함하는 저장소로 구성이 된다. 앱에서 처리하는 다양한 유형의 데이터들이 있을 텐데 그런 경우 해당 유형들마다 이에 대한 Repository를 만들어야 한다. 예를 들면 결제, 주문, 상품 관련 데이터들이 있으면 결제 repository, 주문 repository, 상품 repository를 만들어서 데이터를 관리해야한다.

Data layer는 Repository, Data Source로 나누어진다.

Repository

어떤 데이터 소스를 보여줄 지 결정하는 역할을 한다.

Data Source

데이터를 생성하는 역할을 한다. 보통 interface로 만든다. 이러한 이유는 데이터는 여러 유형이 존재할 수 있기 때문이다. 그래서 interface로 선언된 Data Source를 만들고 이를 상속하는 class를 만들어서 사용해야한다.

Repository에서 Data Source로 요청을 하는 것을 볼 수 있다.

Domain Layer

UI layer와 Data layer 사이에 존재하는 선택적인 레이어이다. 

복잡한 비즈니스 로직 또는 ViewModel에서 재사용되는 간단한 비즈니스 로직의 캡슐화를 담당한다.

 

 

적용은 다음 글에서 계속