Android 아키텍처 컴포넌트를 사용한 구조 개선
Android는 데스크톱 앱과 실행 환경이 매우 다르다. 보통의 데스크톱 앱은 특정 작업 수행 중에 다른 작업을 수행해도 진행중인 작업이 사라지거나 중단되지 않는다. 그러나 Android는 OS의 매우 복잡한 구조 덕분에 앱에서 실행하던 작업이 중단되거나 다시 실행될 수 있다. 개발자는 이를 방지하기 위해 노력해야 한다. 우리는 이에 따라 권장하는 아키텍처를 구성하여 제작하면 사용자에게 좀 더 화려한 이용 경험을 제공해 줄 수 있을 것이다.
이번 기록에서는 아키텍처를 개선하기 전에 Android가 어떤 구성요소로 되어있고, 어떤 문제점이 있기 때문에 개선해야 하는지, 그리고 어떤 디자인 패턴을 사용하여 개선해야 할지를 알아보려 한다.
그래서 왜 개선이 필요한가?
우선, Android는 우리가 흔히 알고 있는 4대 구성요소가 있다. 바로 Activity, Service, Content Providers, Broadcast Receiver다. 그리고 이 구성요소들 사이에서 데이터를 주고받는 일을 해주는 놈이 바로 Intent이다. 이 구성요소들을 적절히 이용하여 앱을 구동한다 하더라도, 앞서 말한 여러가지 변수가 많은 모바일 기기에서는 갑작스러운 중단 상황이나, 구성요소들을 사용할 수 없는 상황이 올 수도 있다.
예를 들자면 전화가 온다거나, 알림이 울린다거나 등등의 상황으로 인해 흐름이 끊길 수 있다. 또한 리소스가 제한되어 있기에 언제든지 프로세스를 종료할 수 있어야 하고 다시 돌아가서 진행될 수 있도록 원활한 흐름을 만들어 주어야 한다. 그렇기 때문에 우리는 적절한 아키텍처를 구성하고 이에 맞춰 원활한 흐름을 가져가야지만 최종 사용자들에게 퍼펙트한 사용 경험을 제공할 수 있다.
위와 같은 상황에서, 아키텍처 구성 원칙 중 관심사 분리가 제대로 되지 않은 상황이라고 가정해보자. UI 관리 로직과 비즈니스 로직이 분리되지 않은 상태에서 화면이 회전된다거나, 전화가 오거나, 알림이 와서 잠시 중단된 이후 다시 돌아왔을때, 모든 로직을 하나의 클래스에 때려박았다면 대참사(?)가 일어나게 된다. UI는 새롭게 그려지고 모든 데이터와 관련 로직들도 재실행이 되므로, 이전의 사용자 데이터는 누락될 수 있고 과정들을 다시 시작해야 하는 상황이 올 수도 있다.
위 상황으로 미루어 봤을 때, 앱 구성요소는 개별적이고, 비순차적으로 실행될 수 있으며, 운영체제나 사용자가 언제든지 앱 구성요소를 제거할 수 있다. 이런 행위들은 직접 제어할 수 없기 때문에 앱 구성요소에 상태 데이터를 저장하는 것은 위험하며 서로 종속되면 안 된다. 만약 앱 데이터와 상태를 저장하는 과정에서 앱 구성요소를 사용할 수 없다면 어떻게 설계를 해야 하는가?
바로, 위의 문제들을 해결하기 위해 디자인 패턴(Design Pattern)과 안드로이드 아키텍처 컴포넌트(Android Architecture Component)가 사용되어야 한다. Google과 각종 커뮤니티에서도 사용자 환경 변화에 유연하게 대응하기 위해 사용 가능한 라이브러리들을 제공한다.
어떤 것들이 있을까?
앞서 말한 문제점들을 해결을 위해 우리는 많은 것들을 제공받을 수 있다. 대표적으로 LifeCycle, LiveData, ViewModel이 있다.
LifeCycle은 액티비티나 프래그먼트의 생명주기를 쉽게 감지하고 이에 따른 작업을 수행할 수 있도록 도와준다.
LiveData는 지속적으로 변할 수 있는 값을 생명주기에 맞게 전달할 수 있도록 도와준다.
ViewModel은 생명주기 변화에 맞서 UI 표시에 필요한 데이터를 관리할 수 있도록 도와준다.
위의 대표적인 3가지 컴포넌트와 함께 MVVM 디자인 패턴을 적용하여 궁극적인 목표인 앱 아키텍처 개선을 할 수 있다. MVVM패턴에 맞추어 제공하는 ViewModel을 함께 사용한다면 Android에서의 MVVM 디자인 패턴 구현은 확실히 좋은 방향으로 달라질 것 같다.
앞서 말한 관심사 분리와 같은 이슈는 MVVM패턴을 사용함으로써 구현이 가능하다.
결론
결론적으로, Android 앱은 적절한 생명 주기와 상황에 따라 변할 수 있는 여러가지 환경에 적절하게 대응해야 한다. 이를 도와주는 것들이 AAC이며, 여기서 제공하는 ViewModel을 제대로 활용하기 위해 MVVM 디자인 패턴을 적용하여 앱 아키텍처를 구성한다면 사용자게에 최고의 사용 경험을 제공할 수 있는 앱을 만들 수 있을 것으로 예상된다.
앞으로는 위의 컴포넌트들과 MVVM 디자인 패턴을 사용하여 앱 아키텍처를 최상으로 끌어올려 보도록 노력하는 과정을 작성해 보려 한다.
'Android' 카테고리의 다른 글
Layout Inspector로 레이아웃 디버깅하기 (0) | 2020.06.01 |
---|---|
Android에서의 MVVM은 무엇이고 왜 사용하는가 (0) | 2020.04.06 |
'onMessageReceived' overrides nothing 해결 (1) | 2020.03.30 |
Biometric을 이용한 지문 인식 사용 (2) | 2020.03.20 |
Bitbucket Pipeline + Telegram Bot으로 App 자동 빌드/배포 하기 (2) (0) | 2020.02.12 |
댓글
이 글 공유하기
다른 글
-
Layout Inspector로 레이아웃 디버깅하기
Layout Inspector로 레이아웃 디버깅하기
2020.06.01 -
Android에서의 MVVM은 무엇이고 왜 사용하는가
Android에서의 MVVM은 무엇이고 왜 사용하는가
2020.04.06 -
'onMessageReceived' overrides nothing 해결
'onMessageReceived' overrides nothing 해결
2020.03.30 -
Biometric을 이용한 지문 인식 사용
Biometric을 이용한 지문 인식 사용
2020.03.20