본문 바로가기

개발 코딩 정보 공유/안드로이드 자바 코틀린

안드로이드 앱 아키텍처 가이드를 따르라!

소개

 

안녕하세요. 김과자 입니다.

기존의 앱 개발계는 그야말로... '개판' 입니다. 소스는 이사람 저사람을 거치고 산넘고 물건너 뒤죽박죽 난리 블루스입니다.

그런곳이 어디냐구요 ?... 대부분이 이런 어려움을 겪고 있습니다. 안드로이드는 특히나 오픈소스가 많고, 프레임워크 레벨에서의 파편화도 심각했습니다. 그에 따른 개발기준도 해당 소스를 만진 개발자 수만큼 많았습니다. 정말이지 노답일수밖에 없죠.

 

그리하여... 구글은 개발 단에서 지킬 최소한의 기준을 제시합니다.

바로 앱 아키텍처 가이드 입니다. 이 기준을 지키면 그들이 말하는 클린 아키텍처에 한발짝 다가갈수 있습니다.(아마도)

그렇다면 과연 클린한 아키텍처란 무엇일까요? 매우 길어질수 있어서 다른글을 통해 한번 같이 알아보겠습니다.

 

"한마디로 요약하자면 서로간(각 경계간)의 종속을 없애고, 제어 흐름을 지키는 것" 입니다.

그걸 구글 아키텍처 컴포넌트 를 사용하면 매우 쉽게 접근할수 있다는게 요지 이죠.

자 그럼 알아보겠습니다.


 

관심사 분리

어찌보면 정말 클린하게 설계하는 방법은 단 한가지입니다. 각각의 관심사를 분리 하는것 입니다. 

예를들면 가장 많이 하는 실수? 중에 하나가 Activity 또는 Fragment에(혹은 컨트롤러단) 모든 코드를 작성하는 실수를 하게 됩니다.

해당 클래스들에는 UI 관련 로직만을 작성해야 합니다. Activity , Fragment 등의 클래스는 최대한 가볍게 유지하여야 많은 수명 주기 관련 문제를 피할 수 있습니다.

 

 


 

클린으로 가는 앱 구조

그래서 구글에서는 아래와 같은 구조를 제시합니다. 이걸 꼭 똑같이 지킬필요는 없지만, 참고는 할수 있겠죠.

종속의 흐름이 아닌 데이터 제어 흐름.

중요한 기준이 보이시나요? 위 그림처럼 구성요소 종속 흐름이 한쪽으로만 흘러야 합니다. 즉 서로를(양방향으로) 알면 안된다는 것입니다. 예를들면 Activity에서 viewModel 알지만 viewmodel은 activity를 호출하거나 변수에 넣거나 하면 안됩니다. 상위에서 하위로만 흘러야 하죠. 또 하나의 중요한 원칙은 각자 할일만 하자 입니다. 무슨 소리냐하면 데이터는 데이터처리하는데서 하고 UI에서는 UI관련만 처리하자. 라는 것이죠. 단순하지만 이게 정말 중요한 규칙 입니다.

 

 


 

안드로이드 아키텍처 컴포넌트

AAC를 사용하면 자연스레 MVVM패턴을 따르게 됩니다.

MVVM패턴은 Model, View, ViewModel로 이루어진 application 설계 방법중 하나입니다. 

아래의 목록들은 공부할 AAC 목록입니다. 너무 많은데요... 좌절하지 마시고 다음편부에서 하나씩 알아보겠습니다.

 

- viewmodel (data 지속성 관리) 

https://developer.android.com/topic/libraries/architecture/viewmodel

- livedata (viewModel과 함께 사용. 기존의 rx등 대체한다)

https://developer.android.com/topic/libraries/architecture/livedata 

 

 

2021.08.06 - [HELLO_WORLD/안드로이드_Android] - 앱 아키텍처 가이드 - ViewModel 편

 

안드로이드 앱 아키텍처 가이드 - ViewModel 편

개요 안드로이드 클린아키텍처 가이드에 따라서 이번편은 ViewModel 을 알아보겠습니다. ViewModel은 MVVM 패턴의 중간다리 역할 입니다. 분류를 하자면 presenter 쪽에 넣을수 있겠네요. Activity나 Fragment

www.blueswt.com

 

- retrofit 

https://square.github.io/retrofit/

 

- room(로컬 데이터베이스 관리)

 https://developer.android.com/topic/libraries/architecture/room

 

- hilt(종속성 관리, 기존의 dagger, koin 등)

 https://developer.android.com/jetpack/androidx/releases/hilt?hl=ko

 

- coroutine (멀티쓰레딩, 비동기 처리 관련) 

https://developer.android.com/kotlin/coroutines?hl=ko

2021.02.05 - [HELLO_WORLD/안드로이드_Android] - 안드로이드에서 사용하는 코루틴 (코틀린)

 

- workmanager(비동기처리) 

https://developer.android.com/topic/libraries/architecture/workmanager

 

 

- binding(view, data)

 https://developer.android.com/topic/libraries/view-binding?hl=ko

 

 

 

 


참고문서

 

MVVM+클린아키텍처 참고 : https://fernandocejas.com/blog/engineering/2019-05-08-architecting-android-reloaded/

안드로이드 앱 아키텍처 가이드 : https://developer.android.com/jetpack/guide