[TIL] 안드로이드 애플리케이션 설계

Doodung·2022년 1월 12일
1

Android

목록 보기
9/9
post-thumbnail

안드로이드의 특징

하나의 진입점, 하나의 프로세스에서 실행되는 일반적인 애플리케이션과 달리 안드로이드 애플리케이션은 액티비티, 프래그먼트, 서비스, 브로드캐스트 리시버, 콘텐츠 프로바이더 등의 컴포넌트로 구성되며, 여러 프로세스로 실행될 수 있고, 진입점 또한 다양하다.

안드로이드는 짧은 시간 내에 여러 애플리케이션과 상호 작용하는 경우가 많다. 그 과정에서 전화나 알림 또는 메모리 부족으로 인해 기존에 하던 작업이 방해를 받거나 중단될 수 있다.

안드로이드 컴포넌트는 언제든지 실행되고 메모리 부족과 같은 시스템 조건으로 인해 의도치 않게 종료될 수 있다.
이러한 컴포넌트의 생명 주기는 개발자가 직접 제어하는 것이 아닌 안드로이드 시스템이 제어하기 때문에, 데이터 및 상태에 대한 내용을 컴포넌트에 저장하는 것은 위험하다.


안드로이드 애플리케이션 설계 원칙

액티비티 또는 프래그먼트 같은 UI 컴포넌트에 많은 코드를 작성하면 Context, View, 데이터, 시스템 이벤트 등을 쉽게 참조할 수 있어 코드량이 거대해진다.

UI 컴포넌트에 데이터를 저장하게 된다면 예외 사항들에 대응하기 힘들고, 거대해진 코드량 때문에 가독성또한 떨어진다. 그러므로 액티비티와 프래그컨트의 클래스 의존성은 최소화하는 것이 좋다.

따라서 가장 중요한 원칙은 관심사 분리다.
관심사란 어떠한 상태나 데이터에 영향을 미치는 정보의 집합이다. 이는 클래스 간의 강한 의존성을 느슨하게 하며 모듈화 시킨다. 모듈이란 것은 다른 모듈로부터 독립적이며 영역에 따라 다른 역할을 한다는 의미이다.

관심사 분리가 잘 되었을 때

  1. 애플리케이션의 설계, 배포, 유닛 테스트와 같은 일부의 관점에서 더 높은 자유도가 생긴다.
  2. 코드 또한 단순화되고 유지 보수 측면에서 더 적은 비용이 들어간다.
  3. 독립적인 개발과 재사용성도 증대하므로 생산성 또한 향상된다.

관심사 분리는 추상화의 일종이다. 대부분의 추상화에서처럼 인터페이스의 추가는 필수이며 실행에 쓰이는 더 순수한 코드가 있는 것이 일반적이다.


권장하는 애플리케이션 설계

구글에서는 다음과 같은 관심사 분리를 통해 애플리케이션을 설계하는 것을 권장한다.


https://developer.android.com/jetpack/guide

  • 액티비티 또는 프래그먼트는 단지 Viewmodel만을 참조한다.
    -> 하위 계층의 의존성이 어떻게 변경되든 액티비티나 프래그먼트는 관심이 없다.

  • ViewModel은 Repository라는 저장소를 참조하고 이 저장소로 부터 UI 컴포넌트가 화면을 구성하는 데 필요한 데이터를 불러온다.

  • 데이터를 불러와 LiveData라는 데이터의 변화를 감지할 수 있는 형태로 관리한다.

  • 저장소는 두 가지 타입의 모델을 참조하는데, 한가지는 네트워크 연결이 필요 없는 내부 모델이고, 다른 하나는 우리가 일반적으로 서버에서 데이터를 불러오는 네트워크가 필요한 원격 모델이다.
    -> 내부 모델은 일반적으로 데이터베이스를 지칭한다. 안드로이드에서 자주 사용하는 데이터베이스 관리 시스템은 프레임워크에 포함된 SQLite, Room, Realm 등이 될 수 있다.
    -> 원격 모델은 일반적으로는 Http 통신이 될 수 있으며, OkHttp 또는 Retrofit과 같은 라이브러리가 주로 서버와의 통신에 사용된다.

  • 내부 모델 또는 원격 모델을 통해 얻은 데이터는 ViewModel에 관리하며 데이터의 변경이 감지되는 대로 UI 컴포넌트의 바인딩된 뷰에 나타낸다.
    -> 사용자 경험을 증대시키도록 일반적으로 서버에서 얻은 데이터는 내부 데이터베이스에 저장하여 불러온다.

ViewModel이라는 것은 내부 데이터베이스만을 항상 참조하고, 클라이언트의 데이터베이스와 서버의 데이터베이스가 요청으로 비동기적으로 동기화한다. 이렇게 되면 전파수신약전계(오프라인 혹은 느린 네트워크 상황)에서도 애플리케이션은 원활히 동작할 수 있고, 네트워크 상황이 좋아지는 대로 다시 최신의 데이터로 UI 컴포넌트를 갱신할 수 있다.



출처 - 아키텍처를 알아야 앱개발이 보인다 / 옥수환

profile
반가워요!

0개의 댓글