Clean Architecture & 모듈화 개요

노준혁·2023년 6월 19일

왜 아키텍쳐가 중요할까?

  • 객체지향의 책임 분리, 추상화를 기본적인 단위로 만들어둔 것.
  • 코드가 추가되어도 로직이 존재해야 할 곳을 결정해두어서 버티컬 피쳐들을 빠르고 고민없이 안정성을 그대로 유지하면서 추가하는 속도 상의 이점이 존재
  • 잦은 스펙의 변화에도 코드는 최소한의 변경으로 대응하기 위한 솔루션
  • 즉, 유지보수, 안정성, 속도에 큰 이점
  • 객체 간의 협력을 잘하는 것이 객체지향의 순수한 의미

아키텍쳐 패턴 정리

MVCMVPMVVM
Pros단순, 보편화View, Model 사이의 의존성이 없음View, Model 사이의 의존성을 없앰, View와 ViewModel 사이 의존성 또한 없앰. 이로 인해 각 부분을 독립화할 수 있기에 모듈화할 수 있다는 장점 또한 존재.
ConsView, 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를 가지고 있어 값이 변할 수 있음. )
profile
https://github.com/nohjunh

0개의 댓글