728x90
어느 정도 서비스가 커진 애플리케이션 같은 경우에는 수많은 기능들이 있어 복잡도가 굉장히 높다. 복잡도가 높아질수록 개발할 때 어떻게 하면 유지 보수하기 쉬울까를 고민해 봐야 한다. 또한 애플리케이션은 새로운 기능이 추가된다거나 로직이 수정되었을 때 유연하게 대처할 수 있도록 구조화해야 한다.
“If you want to go fast, if you want to get done quickly, if you want your code to be easy to write, make it easy to read”
– Robert C. Martin
클린 아키텍처는 미국의 소프트웨어 엔지니어 Robert C.Martin이 고안하였다. 클린 아키텍처의 목표는 계층별로 관심사를 분리하고 비지니스 로직을 캡슐화하는 것이다. 아키텍처가 추구하는 내용은 아래와 같다.
- UI, Framework, DB 등의 독립성
- 기능 변경 및 확장의 용이성
- 테스트 용이
클린 아키텍처 다이어그램
Entity
- 가장 핵심 규칙을 캡슐화
- 모든 플랫폼 애플리케이션에서 재사용 가능
- 외부에서 변화가 있어도 변경될 가능성이 적음
Use Case
- 애플리케이션에 특화된 업무 규칙을 포함
- Entity로부터 출입하는 데이터 흐름을 조정
- Entity의 핵심업무 규칙을 이용하여 Use Case 목적을 달성
- Use Case의 변경이 Entity에 영향을 주면 안됨
- UI, Framework같이 외부에서 발생한 변경으로부터 격리
Interface Adapter
- 비즈니스 로직만 담당
- Use Case와 Framework 사이의 중간 다리 역할
- MVP 패턴의 Presenter, MVVM 패턴의 ViewModel이 포함
Framework
- 안드로이드 프레임워크
- 앱 개발 같은 경우에는 실질적으로 작성할 코드가 없음
- 구글이 새로운 안드로이드 프레임워크를 배포할 때 변경사항 발생하므로 안드로이드 프레임워크를 가장 외부에 위치시켜서 피해를 최소화
클린 아키텍처에서의 핵심은 의존성 규칙이다. 각각의 클래스는 자신의 역할만 수행하고, 서로가 어떤 의존 관계를 어떻게 할지 규칙을 정하고 지켜야 한다. 의존성은 규칙은 반드시 외부에서 내부로 향해야 한다. 내부로 갈수록 의존성은 낮아진다.
'Android' 카테고리의 다른 글
안드로이드 스튜디오 Arctic Fox 버전 이후 gradle allprojects 오류 해결 방법 (0) | 2022.02.05 |
---|---|
SharedPreference를 효율적으로 사용해보기 (0) | 2022.01.17 |
안드로이드 4대 컴포넌트 (0) | 2021.12.27 |
BottomSheetDialogFragment에서 Dagger 사용하기 (0) | 2021.12.06 |
이제는 필수가 되어 버린 페이지네이션(Pagination) (0) | 2021.11.17 |