MVC 패턴

 

MVC는 패턴은 애플리케이션을 세가지영역 ,

모델 뷰 컨트롤러 구분하여 작업을 분리함으로 서로간의 결합도를 최소화 하고 유지보수성도 높이며

개발자들이 각각 맡은 영역에만 집중하게 하여 개발의 효율성을 극대화 할수 있는 장점이 있다.

[1]뷰(View)

클라이언트가 보는 화면 요청이 일어나가 처리된 결과를 보여주는 페이지

[2] 컨트롤러(Controller)

컨트롤러는뷰에서 클라이언트가 서비스를 요청 했을때 실행되는 페이지이다.

컨트롤러는 다음과 같은 기능을 처리

  1. 뷰에서 들어온 요청을 받음
  2. 클라이언트가 전달한 파라미터를 추출
  3. 파라미터 유효성 검사 실패하면 뷰로 이동
  4. 서비스  객체의 메소드를 호출하여 파라미터 서비스 객체로 전달
  5. 출력 뷰 페이지로 이동.

[3] 모델 (Model)

두가지 가 있다 서비스처리를 담당하는 Service 다른 하나는 데이터베이스 처리를 담당하는  DAO 객체

**Model**은 어플리케이션이 “무엇”을 할 것인지를 정의 합니다. 내부 비지니스 로직을 처리하기 위한 역할을 할 것입니다.

  • 처리되는 알고리즘, DB 와 상호작용(CRUD Create Read Update Delete), 데이터 등등..

**Controller**는 모델이 “어떻게” 처리할 지를 알려주는 역할을 할 것이고, 모바일에서는 화면의 로직처리 부분입니다. 화면에서 사용자의 요청을 받아서 처리되는 부분을 구현되게 되며, 요청 내용을 분석해서 Model과 View에 업데이트 요청을 하게 됩니다.

  • 사용자로 부터의 입력 을 받고 Model 또는 View중개인 역할

**View**는 화면에 “무엇” 인가를 “**보여주기 위한 역할”**을 합니다. 컨트롤러 하위에 종속되어, 모델이나 컨트롤러가 보여주려고 하는 모든 필요한 것들을 보여줄 것입니다.

 

 

MVP 패턴

 

MVP 모델은 Model-View-Presenter 로 구성됩니다. 

■ 뷰(View)

The view is a passive interface that displays data (the model) and routes user commands (events) to the presenter to act upon that data.
실제 view 에 대한 직접적인 접근을 담당합니다. 안드로이드에서 액티비티/프래그먼트는 뷰의 일부로 정의합니다.  
View 에서 발생하는 이벤트는 직접 핸들링 할 수 있으나 Presenter 에 위임하도록 합니다. 위임하는 방법은 액티비티가 뷰 인터페이스를 구현해서 Presenter에서 코드를 만들 인터페이스를 갖도록 하면 됩니다. 이렇게 하면 특정 뷰와 결합되지 않고 가상 뷰를 구현해서 간단한 유닛 테스트를 실행할 수 있습니다. 

 

■ 프리젠터(Presenter)

The presenter acts upon the model and the view. It retrieves data from repositories (the model), and formats it for display in the view
본질적으로는 MVC의 컨트롤러와 같지만, 뷰에 연결되는 것이 아니라 인터페이스로 연결된다는 점이 다릅니다. 이에 따라 MVC가 가진 테스트 가능성 문제와 함께 모듈화/유연성 문제 역시 해결합니다. 프리젠터(Presenter)의 역할을 한줄로 표현한다면 뷰(View)와 모델(Model) 사이에서 자료 전달 역할을 합니다. 

 

■ 모델(Model)

The model is an interface defining the data to be displayed or otherwise acted upon in the user interface.
앱 데이터 및 상태에 대한 비지니스 로직을 수행합니다.

 

 

차이점

추가로 MVC와의 차이점을 더 설명하자면, 액티비티와 프래그먼트가 이제 View의 일부로 간주된다는 점입니다. 그렇기 때문에 View는 유저 액션 이벤트를 Presenter로 전달하는 역할을 합니다.

 

Presenter는 Model과 View의 가운데서 상호작용 관리를 하며 내용상 MVC의 컨트롤러와 동일하지만 View에 연결되지 않는 단순 인터페이스라는 점에서 차이가 있습니다.

 

그렇기 때문에 View에게 표시할 방법을 지시하지 않고 단순히 UI에 표시할 내용(Data)만 View에게 전달하게 됩니다.

그리고 이 내용(Data)을 기반으로 View는 스스로 UI를 업데이트를 합니다.

 

 



출처: 

https://faith-developer.tistory.com/71

'개발합시다. > BackEnd 공부' 카테고리의 다른 글

동기적 & 비동기적 프로그래밍이란  (0) 2021.09.09
RDBMS vs NoSQL (간단 정리)  (0) 2021.09.03
Java Gradle 과 Maven의 차이  (0) 2021.09.03
Node.js vs Spring Boot  (0) 2021.09.02
Spring과 Spring Boot의 차이점  (0) 2021.09.02

+ Recent posts