클린아키텍쳐 + MVVM

t1nm1ksun·2024년 11월 4일
1

안드로이드

목록 보기
1/5

클린 아키텍쳐와 MVVM패턴을 연결하면 유지보수성이 높아진다

근데 클린 아키텍쳐랑 MVVM이 뭔데요?

Clean Architecture (클린 아키텍쳐)

키워드는 관심사(Layer) 분리

화살표는 모듈간 의존관계를 의미 → 즉 단방향 데이터 흐름!

  • 심사 분리
    • 관심사에 따라 레이어를 분리한다

  • 각 레이어 마다 다른 레이어와 독립적이다
  • 바깥쪽 일수록 Low Level(저수준)데이터, 안쪽으로 갈 수록 추상화되고 캡슐화 된다
  • 내부로 향해서만 의존 가능
    - 안쪽 원은 바깥쪽 원을 알 수 없다.
    - 바깥쪽 원에 선언된 이름을 안쪽에서 참조하면 안된다.
    - 걍 바깥쪽 원은 어떠한 것도 안쪽에 영향을 주면 안됨!!!
    (건들 ㄴㄴ!)
  • [Entities]
    • 가장 일반적인 비즈니스 규칙을 캡슐화하고 DTO(Data Transfer Object)도 포함하는 전사적 비즈니스 규칙
    • 외부 요인으로 인해 변경 될 가능성이 가장 적음
  • [Use cases]
    • Intereactor라고도 하며 애플리케이션 별 비즈니스 규칙
    • 데이터베이스, 공통 프레임 워크, UI 변경 사항 으로부터 분리
  • [Interface Adapters (Presenters)]
    • 데이터를 Entity 및 UseCase의 편리한 형식(Format) 에서 데이터베이스 및 웹에 적용 할 수있는 형식으로 변환 (레이어 간 데이터 변환)
    • 이 계층에는 MVP의 Presenter, MVVM의 ViewModel 및 Repositories가 포함
    • 즉 순수한 비즈니스 로직만을 담당하는 역할을 하게 됨
  • [Frameworks & Drivers (웹, DB)]
    • 웹 프레임 워크, 데이터베이스, UI, HTTP 클라이언트 등으로 구성된 가장 바깥 쪽 계층
    • 외부 시스템과 상호작용
    • UI 렌더링 및 데이터베이스 트랜잭션과 같은 이니프라 세부정보 관리

MVVM Pattern

-MVVM 패턴에서 M은 Model, V는 View, VM은 ViewModel
-쉽게 말해 V는 UI, Model은 UI가 그려지는데 필요한 데이터 혹은 UI에 표시되어야 하는 데이터
-model과 view의 사이에서 view model이 중간 다리 역할을 하여 view와 model을 분리시켜 줌

View: 사용자가 보게되는 화면인 UI

ex) Activity, Fragment…

Model: 데이터를 처리하는 역할

ex) dataClass, Repository…

View Model: View에서 표시할 데이터를 Observable 타입으로 관리하여 화면을 갱신

Live Data: 데이터가 변경될 때마다 자동적으로 알려줌

동작

  1. View를 통해 사용자의 action(이벤트)을 받음
    1. View는 ViewModel로 action 전달
  2. View Model에서 비지니스 로직 수행
    1. View Model은 Model에게 데이터 요청
  3. Model이 요청에 응답
  4. Model이 준 데이터를 View Model이 가공하여 LiveData에 저장
  5. View Model이 Data Binding을 통해 View 업데이트
  • 요약

장점

  • View 와 Model 사이에 의존성이 없음
  • View 와 ViewModel 사이에도 의존성이 없어 독립적으로 모듈화 가능
    • 유닛테스트 수행 가능
  • 모듈간의 의존성을 분리하면 왜 좋은데요? → 유지보수가 편함
  • 중복 코드도 모듈화
  • AAC 등 여러 라이브러리 접목 가능
  • AAC는 또 뭔데요?

단점

  • 다른 디자인 패턴에 비해 설계가 복잡(ViewModel 설계가 복잡하다,,,)
  • Databinding, LiveData 등 다른 라이브러리를 필수적으로 알아야 함

MVC 도 있고 MVP도 있는데 왜 MVVM이죠?

MVC, MVP가 뭔지 모른다구요?

이 쪽으로 가시면 됩니다 →MVC / MVP

[MVC]
View와 Controller가 모두 액티비티와 프래그먼트 같은 UI에서 처리되어서 레이어 분리가 비교적 원활하지 않음

[MVP]
Presenter가 View와 1대1로 동작하므로 서로 의존성이 강해지는 문제 발생 → Presenter의 로직이 거대해짐

[MVVM]

View와 Model사이에 ViewModel을 통해 관심사를 확실히 분리

View가 리컴포지션 되더라도 ViewModel을 통해 데이터를 유지할 수 있음

(완전 슥껄하죠?)

profile
KU CSE

0개의 댓글