왜 아키텍쳐가 중요할까?
- 객체지향의 책임 분리, 추상화를 기본적인 단위로 만들어둔 것.
- 코드가 추가되어도 로직이 존재해야 할 곳을 결정해두어서 버티컬 피쳐들을 빠르고 고민없이 안정성을 그대로 유지하면서 추가하는 속도 상의 이점이 존재
- 잦은 스펙의 변화에도 코드는 최소한의 변경으로 대응하기 위한 솔루션
- 즉, 유지보수, 안정성, 속도에 큰 이점
- 객체 간의 협력을 잘하는 것이 객체지향의 순수한 의미
아키텍쳐 패턴 정리
| MVC | MVP | MVVM |
|---|
| Pros | 단순, 보편화 | View, Model 사이의 의존성이 없음 | View, Model 사이의 의존성을 없앰, View와 ViewModel 사이 의존성 또한 없앰. 이로 인해 각 부분을 독립화할 수 있기에 모듈화할 수 있다는 장점 또한 존재. |
| Cons | View, Model 사이 의존성이 높음 → 유지보수 어려움 | View와 Presenter 사이의 의존성이 높음 | ViewModel의 설계가 쉽지 않음. |
- 웹과 달리 안드로이드, IOS의 의존성과 책임 분리를 고려해 MVC에서 더 나아가 MVP, MVVM 같은 디자인 패턴이 점차 생겨나게 됨.
- MVC는 서비스가 확장된다는 것을 고려했을 때 모바일 진영에서는 어울리지 않았음.
- MVVM은 옵저버패턴을 사용할 수 있기에 결국 현재 안드로이드 진영에서는 MVVM을 적극 활용.

- Compose같은 선언형 UI는 MVVM의 존재 의미를 알게 해주는 핵심.
- ViewModel이 들어가는 이유는 옵저버패턴을 통한 N:1 관계를 만들어 줄 수 있기 때문 (ViewModel과 View는 1:N 관계)
NowinAndroid
GitHub - android/nowinandroid: A fully functional Android app built entirely with Kotlin and Jetpack Compose
- 아키텍쳐와 모듈화를 제대로 배울 수 있는 깃헙레포
Compose를 써야 하는 이유
- 선언형 프로그래밍 패러다임으로의 전환의 의의: 기존 명령형 프로그래밍 패러다임에서 View가 복잡해질수록 유지보수를 위한 복잡성이 증가해지는 것을 방지하고, State의 관리 포인트를 일원화 함으로써 코드를 깔끔하고 유지보수하기 쉽게 작성 가능
Clean Architecture
- 클린아키텍쳐의 본질은 계층을 나누는 것
- 경계를 구분해 아키텍쳐의 계층을 잘 나눠 설계한다면 백엔드단에서 실수하더라도 프론트단에서 어플이 터지지 않게 예외처리 하기 수월
일반적인 구조의 Clean Architecture

- 클린 아키텍쳐 개념: ‘책임’을 나누고 그 경계를 기준으로 각 레이어가 아는 것은 그 레이어만 알게 하도록 하기 위해 추상화를 통해 interface로 만들고 구현체를 활용해 동작하게 함.
- UI = (Compose,액티비티, 프래그먼트), Presenter = ViewModel 을 통해 프레젠테이션 계층(View, ViewModel)을 만들고
- 유즈케이스가 엔티티에 들어가는 것은 아니지만, 유즈케이스를 거쳐 레파지토리에 접근하게 된다. 즉, 유즈케이스가 도메인계층.
- 이 도메인 계층에서 데이터 계층(레파지토리, 데이터 소스)에 접근하게 되는 원리
모바일 구조의 Clean Architecture

- DataStore ~~ DataSource
- Model ~~ VO (value object)
- Entity ~~ DTO (
VO(Value Object): 값 오브젝트로써 값을 위해 쓰이기에 read-Only 특징이 있음. DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있음. )