[Android] 디자인패턴_MVVM 구조의 이해

Twaun·2021년 11월 7일
0
post-thumbnail

디자인 패턴이란?

  • 소프트웨어에서 디자인 패턴이란 특정 문맥에서 발생하는 공통적인 문제에 대해 재사용 가능한 해결책이라고 정의를 내리고 있다.
  • 다양한 종류의 디자인패턴이 존재한다. (생성, 구조, 행동 등등..) 그 중에서 파일 구조에 관련된 디자인패턴으로 MVC, MVVM 등등이 있다.
  • 내가 느낀 디자인패턴이란 코드를 좀 더 클린하게 작성할 수 있도록 하고 유지보수를 좀 더 쉽게 하기 위함이라고 생각된다.
  • 프로젝트의 성격에 맞게 적절한 디자인 패턴을 선택해서 적용하면 되고 이전에는 MVC 패턴을 많이 사용했지만 최근에는 MVVM 형태로 프로젝트를 구성한다.
  • 여기서 다룰 MVVM 구조는 View, ViewModel, Model 로 코드를 분리하여 각자 할일을 하며 단방향으로 다른 계층의 데이터의 상태를 보고 로직을 작성한다. 이를 통해 각 계층에서 해야할 일만 잘 알고 있다면 코드의 작성과 유지보수가 좀 더 쉬워질 것이다.

MVVM( Model - View - ViewModel ) 구조

Model

  • ViewModel과 관련된 코드로부터 분리된다.
  • 내부 저장소나 통신을 통해 불러온 데이터 형태이다.
  • 보통 레파지토리에 데이터를 저장하고 있으며 이를 ViewModel에 제공한다.

View

  • 화면에 보이는 사용자와 상호작용을 하는 부분이다.
  • XML과 Activity 가 View 에 해당된다고 볼 수 있다.
  • UI와 관련된 Presentation 로직을 작성하고 ViewModel의 데이터를 사용한다.

ViewModel

  • View와 관련된 코드로부터 분리된다.
  • View에 보여질 데이터와 상태와 관련된 Business 로직을 작성한다.
  • Model로 부터 필요한 데이터를 받아온다.

🤔 왜 MVC 에서 MVVM을 많이 사용하게 된거죠?

MVC(Model - View - Controller) 구조에서는 controller 가 연결된 view의 모든 로직을 담당하게 되어있다. Controller 가 해야할 일이 너무 많아진다. 즉, 작성되어야 할 코드들이 너무 많아져 Presentation 로직과 Business 로직이 구분이 잘 안되기 때문에 코드를 수정하고 파악하기가 힘들다는 점이다.

정리

mvvm구조는 위와 같이 UI와 Buisiness 로직과 데이터를 분리하고 각 계층을 모듈화 하여 테스트를 용이하게 한다. 또한 각 계층에서 서로를 참조 하지 않고 단방향 구조로 참조하고 있는 계층의 필요한 데이터를 바라보고, 이 데이터의 상태만을 보고 판단해서 로직을 작성하면 되기 때문에 좀 더 클린한 코드를 작성할 수 있다.

<그림 첨부 예정>

[요청] View -> ViewModel -> Model
[응답]View <- ViewModel <- Model

🗣 대화를 통해 마지막 정리!

🗄 View
🗃 ViewModel
🗳 Model

[요청]
view : viewModel아!! 나 🗄 정보가 필요해.
viewModel : Model아!! 나 🗃 정보(🗄 재료)가 필요해.
model : 🗳(🗃 재료)을 저장소에서 불러오는 중..
[응답]
model : (저장소 -> 🗳), viewModel님 🗳 보내드렸습니다.
viewModel : (🗳 -> 🗃), view님 요청하신 🗃 보내드렸습니다.
view : (🗃->🗄) , 🗄 화면에 뿌려주기

profile
Android Developer

0개의 댓글