💻 개발/TIL

[TIL] 22.03.19

고도고도 2022. 3. 19. 19:47

공부한 것

MVC, MVP, MVVM, AAC

알게된 것

1. MVC

우선 가장 일반적으로 사용되는 아키텍쳐 패턴이다. Model, View, Controller 로 나뉜다.

 

Model 은 데이터 생성, 삭제, 갱신 등의 로직이 들어있다.
View 는 사용자에게 보여지는 화면이다.
Controller 는 사용자의 입력을 처리한다.

 

우선 사용자가 View 를 통해서 입력이 들어오고 Controller 가 이를 처리한다. 이 때 입력을 분석해서 ModelView 에 갱신 요청을 한다. Model 은 데이터를 갱신하고 ViewUI 를 갱신한다. 정리하자면, ControllerModelView 가 무엇을 해야할 지 알고 있고 이를 통제하고 있다. Controller 를 통해서 ModelView 가 연결되어 있으므로 서로 의존성을 띄게 된다. 안드로이드에서는 ViewControllerActivity, Fragment 에 포함되어 있다. InflaterListener 를 생각하면 된다.

 

장점

  • 하나의 액티비티 클래스에 비즈니스 로직을 모두 담을 수 있으므로 개발을 빠르고 쉽게 진행할 수 있다.

단점

  • 유지 보수가 어렵다. 또한 위에서 말했던 것처럼 뷰에서 모델을 직접 호출하므로 뷰와 모델의 의존성이 매우 높다. 따라서 테스트 코드 작성이 어려워 진다.

2. MVP

ModelView 의 의존성을 줄이기 위해 등장한 아키텍쳐 패턴이다. Model, View, Presenter 로 나뉘고 전체적인 느낌은 비슷하다. 하지만 ModelView 가 서로를 직접 참조할 수 없다. 무조건 Presenter 를 통해서만 데이터를 전달할 수 있다.

 

Model 은 데이터 생성, 삭제, 갱신 등의 로직이 들어있다.
View 는 사용자에게 보여지는 화면이다.
Presenter 은 뷰에서 요청한 정보로 모델을 가공하여 뷰에게 전달한다.

 

사용자가 View 를 통해서 입력이 들어오고 Presenter 가 이를 처리한다. PresenterModel 에게 데이터를 요청하고 데이터를 전달받는다. 이후 가공한 데이터를 View 에 전달한다. View 는 데이터를 화면에 보여준다.

 

장점

  • Model과 View의 의존성을 제거했다.

단점

  • ViewPresenter 의 의존성이 높아졌다. 또한 중복 코드가 발생할 수 있다. 예시를 들어보자. 로그인과 로그아웃은 어플의 기본 기능이 되어버렸다. 이 어플리케이션은 여러 페이지가 있고 로그인 기능의 경우 로그인 액티비티로 이동하여 로그인을 진행한다. 이 때 모든 페이지에 로그아웃 기능을 배치한다고 했을 때 모든 Presenter 에 로그아웃 로직을 배치해야 한다. 어떻게 해결할 수 있을까? 중복된 Presenter 를 분리한 것이 바로 View Model 이다.

3. MVVM

이러한 문제점을 해결하기 위해 등장한 패턴이다. Model, View, View Model 로 나뉜다. 가장 큰 특징은 컴포넌트 분리가 정말 잘 되어 있다는 것이다. 또한 참조하는 것이 명확하다.

Google에서 제공하는 MVVM 아키텍쳐 구조

이를 쉽게 구현할 수 있도록 Android 에서는 Live DataView Model 을 제공한다.

 

Model 은 데이터 생성, 삭제, 갱신 등의 로직이 들어있다.
View 는 사용자에게 보여지는 화면이다.
View Model 은 뷰에서 요청한 정보로 모델을 가공한다.

 

사용자가 View 를 통해서 입력이 들어오고 View Model 에게 명령을 한다. View Model 은 필요한 데이터를 Model 에 요청하고 데이터를 전달받는다. 이후 데이터를 가공한다. 이 때 observer 로 인해 View 가 자동으로 갱신된다.

 

장점

  • ViewPresenter 의 의존성을 제거했다. 모든 부분이 독립되어 존재하므로 모듈화를 통한 개발이 용이하다. 또한 테스트와 유지보수 또한 용이하다.

공부할 것

MVVM 프로젝트 코드 분석

느낀 점

어제, 오늘 LiveDataViewModel 과 관련하여 정말 많이 찾아본 것 같다. 그래도 아직 어렵고 공부가 많이 필요하다. MVVM 이 손에 익으면 MVP 도 공부도 공부해보려고 한다.

'💻 개발 > TIL' 카테고리의 다른 글

[TIL] 22.03.22  (0) 2022.03.22
[TIL] 22.03.20  (0) 2022.03.20
[TIL] 22.03.19  (0) 2022.03.19
[TIL] 22.03.17  (0) 2022.03.17
[TIL] 22.03.16  (0) 2022.03.16
[TIL] 22.03.15  (0) 2022.03.15