2020. 8. 14. 14:45ㆍAndroid
3) 클린 아키텍처
클린 아키텍처는 로버트 C. 마틴에 의해 만들어졌다. 클린 아키텍처를 사용하면 각 계층을 분리하고 계층 간의 의존성을 단방향으로 만들어 코드의 재사용성이 용이해지고, 유닛테스트가 쉬워지는 장점이생긴다.
쉽게말하면, 안드로이드 Framework나 다른 Framework 코드(예를들어 Retrofit)과 같은 코드를 우리가 직접 구현할 필요 없이 Interface Adapter의 구현만으로 Use Cases(목적을 가지고 내가 구현한 코드들)와 연결하여 쓸 수 있게된다.
이렇게 내가 만들지 않은 Framework를 가져와서 내 어플리케이션과 잘 엮어내는것이 일반적인 응용 프로그래머(안드로이드 개발자)의 과제인데 이를 위해서 Interface Adapter를 구현하는 방법은 MVC, MVP, MVVM패턴 등이 있다. 어떤 방식을 이용하는것만이 정답은 아니다. 만들어야 할 어플리케이션이 놓여진 상황 따라 다르다(개발기간, 개발인원, 개발자의 숙련도 등등에 따라 다르다)
4) 안드로이드의 특징
안드로이드에 대해 공부하기 시작하면 보통 처음 접하게 되는 것이 안드로이드의 4대 구성요소(App components)이다.
다음은 안드로이드 공식 홈페이지의 앱 구성 요소 부분에서 발췌하였다. 처음에는 액티비티만 사용하게 되지만, 어플리케이션을 개발하면 할수록 나머지 구성요소가 필요해 질 것이다. 그때가서 공부하면 된다.
앱 구성 요소(App components)
앱 구성 요소는 Android 앱의 필수적인 기본 구성 요소입니다. 각 구성 요소는 시스템이나 사용자가 앱에 들어올 수 있는 진입점입니다. 다른 구성 요소에 종속되는 구성 요소도 있습니다.
앱 구성 요소에는 네 가지 유형이 있습니다.
- 액티비티
- 서비스
- Broadcast Receiver
- 콘텐츠 제공자
각 유형은 뚜렷한 목적을 수행하고 각자 나름의 수명 주기가 있어 구성 요소의 생성 및 소멸 방식을 정의합니다. 다음 섹션에서는 앱 구성 요소의 네 가지 유형에 대해 설명합니다.
다만 엑티비티는 다양한 연유로 종료될 수 있으므로 데이터 및 상태에 대한 내용을 종료될 수 있는 구성요소(App components, 컴포넌트)들에 저장하는것은 바람직하지 않다.
대신 어플리케이션이 실행중이라면 계속해서 살아있는 Applictaion 객체에 저장하거나, DB에 저장하는 등 주어진 상황에 따라 다양한 방법을 이용할 수 있다.
5) 안드로이드 어플리케이션 설계 원칙
안드로이드의 특징에서 말했듯, 앱을 개발하다보면 액티비티 또는 프래그먼트 같은 UI 컴포넌트에 많은 코드를 작성하기 쉽다. 하지만 그렇게 할 경우 점점 코드의 양이 늘어나게되고 가독성이 떨어지게 된다.
따라서 앞서 공부한 SOLID 원칙에 따라 클래스를 나누고, 클래스간의 의존성을 느슨하게 하면서 모듈화 하는 과정이 필요하다.
클래스를 나누고 의존성을 떨어트리라는 말은 듣기는 좋지만, 막상 하려고 하면 막막하고, 하더라도 내가 잘 하고 있는지 의구심이 들기 마련이다. 다행스럽게도, 구글에서는 개발자를 위해 다음과같은 어플리케이션 설계를 권장하고 있다.
6) 구글에서 권장하는 어플리케이션 설계
구글의 권장 앱 아키텍처에 따르면 액티비티와 프래그먼트는 단지 ViewModel만을 참조한다. 그것만으로도 사용자에게 보여줄 모든 정보를 (LiveData라는 형태로) 가져올 수 있게 되는 것이다.
그리고 ViewModel은 Repository라는 저장소를 참조한다. 이 저장소는 두 가지 타입의 모델을 참조하는대, 한가지는 네트워크 연결이 필요없는 내부 모델이고, 다른 하나는 서버에서 데이터를 가져오는 원격 모델이다.
보통 내부 모델은 데이터베이스를 의미한다. SQLite나 SQLite 기반의 Room, Realm 같은 것들이 있다. 원격 모델은 일반적으로 http 통신이 될 수 있다. 일반적으로 내부 모델을 이용하여 앱을 구동하고, 비동기 방식으로 원격 모델에 데이터를 요청한 뒤 변경사항이 있으면 내부 모델일 갱신하는 방식을 이용한다.
출처1 | 앱 구성 요소 : https://developer.android.com/guide/components/fundamentals?hl=ko#Components
출처2 | 권장 앱 아키텍처 : https://developer.android.com/jetpack/guide?hl=ko#recommended-app-arch
출처3 | 아키텍처를 알아야 앱 개발이 보인다, 옥수환 저, 비제이퍼블릭
책의 내용을 그대로 가져다 쓰지는 않았지만, 흐름은 책에서 따왔음을 밝힙니다. 글이 마음에 들었다면 책 구입또한 추천합니다 ^^
(https://book.naver.com/bookdb/book_detail.nhn?bid=16327417)
'Android' 카테고리의 다른 글
[Androidx / Jetpack] ViewModel 개요 및 사용법 (0) | 2020.08.30 |
---|---|
[Androidx / Jetpack] LiveData 개요 및 사용법 (0) | 2020.08.30 |
의존성 주입 - Dagger, 모듈과 컴포넌트 (0) | 2020.08.17 |
의존성 주입 - Dagger 기초 예제 (0) | 2020.08.17 |
1. 안드로이드 어플리케이션 설계(1) (0) | 2020.08.14 |