자바

MVC 패턴이란?

gurum 2023. 11. 21. 21:37

 

 

 

 MVC Pattern 이란?


Model - View - Controller 의 약자로 디자인 패턴 중 하나 입니다.

디자인 패턴은 기존 환경에서 반복되는 문제에 대해 재사용이 가능한 해결책을 뜻합니다. 따라서 설계자들이 빠르고 효율적으로 만들 수 있게 도와줍니다.  MVC 는 애플리케이션을 model, view, controller 3가지 역할로 구분하고 있으며 controller - view, controller - model 로 상호작용 합니다.

 

출처:velog.io/@0andwild

 

 

 

출처: 유유하게 자라기 블로그

 

 

 

 

 

Model

 

애플리케이션의 정보, 데이터를 뜻합니다. 데이터베이스, 상수, 문자열과 같은 변수들 또는 이러한 데이터, 정보들의 가공을 책임지는 컴포넌트 해당됩니다. 모델에는 뷰나 컨트롤러의 정보가 전혀 없으며, 정보를 반환과 설정만 가능합니다.

비즈니스 로직을 처리 후 모델의 변경사항을 컨트롤러와 뷰에 전달합니다.

(사용자에게 데이터를 제공하는 로직은 포함X)

 

  • 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야한다.
  • 뷰, 컨틀롤러에 대한 어떤 정보도 알아선 안된다.
  • 변경 발생시, 변경 통지에 대한 처리 방법을 구현해야한다.

 

이렇게 3가지 규칙을 가지고 있습니다.

 

 

 

 

View

 

텍스트 상자, 체크박스, 버튼 등 사용자 인터페이스 요소를 나타내며, 사용자가 볼 수 있는 화면으로 데이터 및 객체의 입력, 출력을 담당합니다.

 

  • 모델이 가진 정보를 따로 저장해선 안된다. (화면에 표시만 하며 따로 저장X)
  • 모델, 컨트롤러에 대한 구성요소들을 알아선 안된다. (자기 자신 제외 다른 요소 참조X)
  • 변경 발생시 변경통지에 대한 처리 방법을 구현해야한다.

 

이렇게 3가지 규칙을 가지고 있습니다.

 

 

 

 

Controller

 

데이터와 사용자인터페이스 요소들을 이어주는 다리역할을 수행하며, 사용자가 데이터를 클릭하고, 수정하는 것에 대한 '이벤트' 들을 처리하는 부분을 뜻합니다. (비즈니스 로직 수행)

 

 

  • 모델이나 뷰에 대해서 알고 있어야한다.
  • 모델이나 뷰의 변경을 모니터링 해야한다.

 

사용자가 버튼을 클릭하면 이벤트는 뷰에서 발생하지만 내부 처리는 컨트롤러에서 관리하게 됩니다. 또한, 입력 발생시에도 이에 대한 통제를 담당합니다.

 

이렇게 2가지 규칙을 가집니다.

 

 



MVC1 과 MVC2


MVC 패턴은 MVC1 과 스프링이 채택한 MC2로 나눌 수 있습니다. 

 

출처: ChanBlog

 

 

 

뷰와 컨트롤러의 역할이 합쳐져있는 형태입니다. jsp 가 뷰와 컨트롤러 역할을 모두 담당하기 때문에 코드가 복잡해지고 유지보수가 힘들다는 단점이 있습니다. 그러나 상대적으로 단순하기 떄문에 작은 프로젝트에는 효울적입니다.

 

 

 

 

 

출처: ChanBlog

 

 

 

MVC1의 유지보수가 힘들다는 단점을 보완하기 위해 나온 모델이며, 뷰와 컨트롤러를 분리한 버전입니다.

컨트롤러가 유저의 요청을 받아 모델에 요청하고 응답을 받아 뷰에 전달해줍니다. (뷰를 통해 사용자에게 보여짐)

MVC2는 코드가 분리되어있어 확장에 용이하고 유지보수가 수월해집니다. 다만 개발속도가 상대적으로 느리다는 단점이 있습니다.

 

 

 

 

 

 

 

사용 이유?


사용자가 보는 페이지, 데이터처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤, 이 3가지로 구성되는 하나의 애플리케이션을 만들면 각각 맡은 바에만 집중 할 수 있게 됩니다.  서로 분리해 각자의 역할만 수행하도록 하면 유지보수성, 확장성, 유연성이 높아지고 중복 코딩이 사라지게 됩니다. 따라서 효율을 높여줍니다. 또한,  각 컴포넌트 별 나눠져 있어 디버깅 및 테스트가 용이 합니다.

 

MVC 패턴을 활용한 프레임워크들.

Python : Django
Javascript : Angular, Vue.js, React
Java : Spring Framework 
Ruby : Ruby on Rails

 

 

 

 

 

※ 참고 블로그

 

 

 

 

'자바' 카테고리의 다른 글

[자바 기초] 연산자  (0) 2021.05.07
[자바 기초] 기본형 종류, 범위(+키워드)  (0) 2021.03.13
[자바 기초] 상수와 리터럴  (0) 2021.03.13
[자바] 자주 발생하는 오류 정리  (0) 2021.03.08