일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 안드로이드 Espresso
- 안드로이드 클린 아키텍처
- 안드로이드 앱 아키텍처 가이드라인 예시
- android DI
- 코루틴
- 안드로이드 최적화
- coroutine
- 안드로이드 Mockito
- Android MVVM
- 스타트업 코딩테스트
- Android App Architecture Guideline
- 안드로이드 JUnit
- sharedFlow
- MVVM
- RxJava
- android clean architecture
- 리싸이클러뷰 최적화
- 안드로이드 앱 아키텍처 가이드라인
- 안드로이드 아키텍처 컴포넌트
- Koin
- 안드로이드 mvvm예제
- android memory leak
- 안드로이드 hilt
- Hilt
- 안드로이드 테스트코드
- 안드로이드 의존성주입
- 안드로이드 mvvm
- 안드로이드 앱 아키텍처 가이드라인 사용법
- 안드로이드 앱 아키텍처 가이드라인 설명
- 안드로이드 리싸이클러뷰
- Today
- Total
안드로이드 연구소
[안드로이드 클린 아키텍처] 안드로이드 앱 아키텍처 가이드라인 본문
처음 블로그를 준비했을 때 핵심으로 준비했던 챕터는 3개였습니다.
- 메모리누수제거, 다양한 오류 검사, Recyclerview최적화
- Android Architecture Component + MVVM
- DI와 테스트코드
위의 공부들이 끝내고 다음 연구 내용을 찾기 위해
많은 채용사이트에서 자격요건과 우대사항의 내용들을 많이 확인하고 있었습니다.
그러던 중 가장 눈에 많이 띄는 내용이 보였는데 그것은 바로
첫번째 클린 아키텍처(Clean Architecture)에 대한 이해 및 프로젝트 적용 경험 보유하신 분
두번째 Android App Architecture Guideline을 잘 이해하고 있으신 분
클린 아키텍처? 앱 아키텍처 가이드라인?
둘 다 찾아보니 매우 밀접한 연관이 있는 것으로 보였습니다.
안드로이드 이외에도 많은 개발자 커뮤니티에서 Clean Architecture패턴에 대한 이론이 유행하였고
그 후 안드로이드 또한 Clean Architecture를 바탕으로 Android App Architecture Guideline으로 재편집된 느낌을 많이 받았습니다.
이는 구글에서 제안한 2017년 버전(챕터2에서 배운 안드로이드 아키텍처 컴포넌트)에서
2022년 최신 버전이 아닐까라고 생각합니다.
* 구글 공식 문서
https://developer.android.com/topic/architecture?hl=ko
앱 아키텍처 가이드 | Android 개발자 | Android Developers
앱 아키텍처 가이드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 가이드에는 고품질의 강력한 앱을 빌드하기 위한 권장사항 및 권장 아키텍처가 포함
developer.android.com
그렇다면 앱 아키텍처 가이드라인의 근간이 되는 Clean Architecture를 우선 배워보도록 하겠습니다.
Q1. ChatGPT, 클린 아키텍처에 대해서 설명해줘
Robert C. Martin(Uncle Bob)에 의해 2012년에 소개되었으며
2017년에 출판한 "Clean Architecture: A Craftsman's Guide to Software Structure and Design"소개했으며
Android를 포함한 다양한 소프트웨어 개발 커뮤니티에서 인기를 얻었습니다.
Uncle Bob은 대규모의 복잡한 소프트웨어 시스템에서
복잡한 종속성, 긴밀한 결합 및 구성 요소 간의 명확한 경계 부족으로 인해
많은 소프트웨어 프로젝트가 시간이 지남에 따라 이해, 유지 관리 및 발전하기 어려워지는 것을 관찰했습니다.
클린 아키텍처는 소프트웨어 시스템 구축을 위한 명확한 모듈식 구조를 가진 디자인 패턴으로 이러한 문제에 대한 해결책으로 제안되었습니다.
클린 아키텍처는 Uncle Bob이라는 사람이 소개한 아키텍처 패턴 정도로 이해되는군요.
규칙없이 설계된 소프트웨어가 복잡해질수록 많은 문제들이 발생하였고
이를 해결하기위해서 공통된 모듈끼리 분리하여 개발한 디자인 패턴정도로 보입니다.
그렇다면 클린 아키텍처에서 공통된 모듈을 어떻게 나누었을까요?
클린 아키텍처의 주요 계층은 아래와 같이 나뉩니다.
1. Entities:
엔터티는 애플리케이션의 비즈니스 모델을 나타냅니다.
시스템의 비즈니스 규칙과 동작을 캡슐화합니다.
2. Use Cases:
애플리케이션의 특화된 비즈니스 규칙을 포함한다.
엔티티로 들어오고 나가는 데이터 흐름을 조정하고 조작한다
3. Interface Adapters
: 이 계층은 외부 세계의 데이터를 유즈케이스와 엔터티가 작업할 수 있는 형식으로 변환합니다.
MVC의 controller, MVP의 present, MVVM의 viewModel이 해당 계층에 속한다.
4. Frameworks and Drivers
: 이 계층에는 외부 인터페이스 및 프레임워크의 구현이 포함됩니다.
하나하나 이해하기는 힘들지만 4가지 계층을 나눠놓았고 이 계층이 클린 아키텍처의 핵심 같습니다.
그렇다면 4개의 계층은 어떤 관계를 가질까요?
클린 아키텍처의 핵심 원칙은 아래와 같습니다.
1. 의존성은 안으로 흐른다.
소프트웨어의 요소를 4가지로 서로 분리하고, 바깥 원은 안쪽에 영향을 미치지 못하게 합니다.
내부 계층(유즈케이스, 엔터티)은 외부 계층에 대한 지식이 없습니다.
이렇게 하면 내부 레이어가 독립적으로 유지되고 재사용할 수 있습니다.
2. 관심사 분리(Separation of Concerns)
: 각 계층에는 특정한 책임이 있으며 자신의 관심사에만 집중해야 합니다.
이러한 분리로 인해 코드베이스를 더 쉽게 이해하고 유지 관리하고 테스트할 수 있습니다.
외부의 UseCase(2)가 내부의 Entity(1)를 의존하여
Entity는 다른 UseCase들에게도 사용할 수 있게 하는 것이 포인트입니다.
Interface Adapters(3)-UseCase(2)와 Frameworks and Drivers(4)-Interface Adapters(3)의 관계도 마찬가지로 보입니다.
또 각 계층의 목적에 맞는 요소만 한 Class에 작성이 되어있기 때문에
각 각에 맞는 테스트가 가능한 것으로 보입니다.
바로 안드로이드용 클린 아키텍처 "Android App Architecture Guideline"에 대해서 알아보겠습니다.
Q2. 안드로이드 클린 아키텍처 Android App Architecture Guideline에 대해 알려줘
(* 해당 내용은 chatGPT의 내용이 아닌 구글 공식 문서와 블로그들을 통해서 정리한 내용들입니다.)
UI레이어(필수) → Domain레이어(선택) → Data레이어(필수) 로 나뉘게 됩니다.
위의 클린 아키텍처는 4가지 계층으로 나뉘어졌었는데
안드로이드에서는 3가지로만 나뉘어졌네요.
심지어 가운데 도메인 레이어는 필수가 아니라고합니다.
1. Data레이어
- DataSource
- Repository
2. Domain레이어
- UseCase
3. UI레이어
- ViewModel(UI state)
- UI element
각 레이어들에서 사용되는 클래스들은 위와 같이 해당합니다.
각 자 클래스들은 어떤 역할을 하고
어떻게 사용되며 서로와 연결되는지 확인해볼까요?
다음 포스팅에 이어서~
'안드로이드 연구소 > 클린아키텍처' 카테고리의 다른 글
[안드로이드 클린아키텍처] 안드로이드 아키텍처 가이드라인 만드는 법2 (데이터 레이어/Retrofit연결/Room연결) (0) | 2023.08.16 |
---|---|
[안드로이드 클린아키텍처] 안드로이드 아키텍처 가이드라인 만드는 법1(Hilt Retrofit 연결하는법/Hilt Room 연결하는법) (0) | 2023.08.14 |
[안드로이드 클린 아키텍처] 안드로이드 앱 아키텍처 가이드라인(Domain레이어) (0) | 2023.06.16 |
[안드로이드 클린 아키텍처] 안드로이드 앱 아키텍처 가이드라인(UI레이어) (0) | 2023.06.16 |
[안드로이드 클린 아키텍처] 안드로이드 앱 아키텍처 가이드라인(Data레이어) (0) | 2023.06.16 |