복합 패턴(MVC, MVP, MVVM)

문딤·2022년 7월 30일
0
post-thumbnail

MVC 패턴

MVC(MODEL - VIEW - CONTROLLER)

애플리케이션을 삼분할 해서 모델 , 뷰 , 컨틀롤러 단으로 나눠서 구성요소에게 고유한 역활을 부여한 개발 방식입니다.

Model : 데이터와 관련된 책임을 담당하는 레이어

[POJO] 비즈니스 로직을 수행한다.
주로 상태 변화를 처리한다.
@Enttity (영속성에서 테이블에 매핑되는 클래스)가 주로 대상이다.
데이터와 행동을 갖는 객체이다.

View : 사용자에게 보일 사용자 인터페이스를 담당하는 레이어

  • 웹에서는 웹 브라우저로 렌더링 되는 페이지가 해당된다.
  • 모델이 처리한 데이터를 받아서 합산하고 사용자(클라이언트)의 브라우저로 렌더링 되는 페이지이다.
  • 데이터, 로직은 없어야 한다.
  • 동적으로 처리되어야 할 데이터를 시각화해준다.
  • 상황과 도메인에 맞게 다른 값을 가져야 하는 데이터들에 대해서만 모델에서 받아온다.

Controller : Model과 뷰를 연결해주는 레이어이다.

  • 컨트롤러는 사용자의 요청에 맞는 서비스를 실행하게 된다.
  • 자바의 Spring에서는 DispatcherServlet으로 컨트롤러를 이해해야 한다.
  • 상당히 많은 역할을 담당하게 되었고, 리플렉션 기반의 애너테이션 기법(AOP)으로 코드를 상대적으로 가볍게 처리할 수 있게 되었다.
  • 처리한 모델의 값을 뷰에 전달해서 반환한다.
    사용자의 요청(웹 브라우저로 들어오는 요청)을 가장 먼저 마주한다.

MVP 패턴

Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분이다.
View : 사용자에서 보여지는 UI 부분이다.
Presenter : View에서 요청한 정보로 Model을 가공하여 View에 전달해 주는 부분이니다.

2) 동작

  1. 사용자의 Action들은 View를 통해 들어오게 됩니다.
  2. View는 데이터를 Presenter에 요청합니다.
  3. Presenter는 Model에게 데이터를 요청합니다.
  4. Model은 Presenter에서 요청받은 데이터를 응답합니다.
  5. Presenter는 View에게 데이터를 응답합니다.
  6. View는 Presenter가 응답한 데이터를 이용하여 화면을 나타냅니다.

⭕ 장점
MVP 패턴의 장점은 View와 Model의 의존성이 없다는 것이다. MVP 패턴은 MVC 패턴의 단점이었던 View와 Model의 의존성을 해결하였다.
❌ 단점
MVC 패턴의 단점인 View와 Model 사이의 의존성은 해결되었지만, View와 Presenter 사이의 의존성이 높은 가지게 되는 단점이 있다.
어플리케이션이 복잡해 질 수록 View와 Presenter 사이의 의존성이 강해지는 단점이 있다.

MVVM 패턴

MVVM 패턴은 Model + View + View Model를 합친 용어다.

Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분이다.
View : 사용자에서 보여지는 UI 부분이다.
View Model : View를 표현하기 위해 만든 View를 위한 Model이다.
(View를 나타내 주기 위한 Model이자 View를 나타내기 위한 데이터 처리를 하는 부분이다.)

2) 동작

  1. 사용자의 Action들은 View를 통해 들어오게 됩니다.
  2. View에 Action이 들어오면, Command 패턴으로 View Model에 Action을 전달합니다.
  3. View Model은 Model에게 데이터를 요청합니다.
  4. Model은 View Model에게 요청받은 데이터를 응답합니다.
  5. View Model은 응답 받은 데이터를 가공하여 저장합니다.
  6. View는 View Model과 Data Binding하여 화면을 나타냅니다.

참고

https://beomy.tistory.com/43

https://fomaios.tistory.com/entry/Design-Pattern-MVP-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80

https://mingrammer.com/translation-10-common-software-architectural-patterns-in-a-nutshell/#%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90-%ED%8C%A8%ED%84%B4-%EB%B9%84%EA%B5%90

https://junhyunny.github.io/information/design-pattern/mvc-pattern/

https://murphymoon.tistory.com/entry/%EC%9A%B0%EC%95%84%ED%95%9C-%ED%85%8C%ED%81%AC-MVC-%EB%A6%AC%EB%B7%B0-%EB%A0%88%EC%9D%B4%EC%96%B4-MVC-%ED%8C%A8%ED%84%B4-5%EB%A0%88%EC%9D%B4%EC%96%B4

profile
풀스택개발자가 될래요

0개의 댓글