spring

MVC구조 정리

jojelly 2022. 1. 10. 20:52
반응형

MVC

Model, View, Comtroller의 약자

프로젝트 구성시 구성요소를 세가지의 역할로 구분하는 패턴이다.

 


 

Model: 애플리케이션의 정보, 데이터를 나타낸다. 테이터베이스, 상수 , 초기화값, 변수등을 뜻함, 이러한 데이터 정보들의 가공을 책임지는 컴포넌트이다.

 

사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.

ex). 화면에 둥근 원 안에 글자가 들어갈 경우, 원의 크기, 글의 위치, 글의 내용, 원의 위치, 글의 포멧정보 등을 모두 가지고 있어야 한다 .

뷰나 컨트롤러에 대해 어떠한 정보도 참조하면 안된다.

데이터 변경 발생시 모델에서 화면 UI를 직접 조정해서 수정 가능하도록 뷰를 참조하는 내부 속성값을 가지면 안된다. 

변경이 일어날시, 변경 통지에 대한 처리방법을 구현해야 한다. 

ex). 모델의 속성중 원의 모양이 세모로 변경된다면-> 이벤트를 발생시켜 누구에게 전달해야하며, 누군가 Model변경요청 이벤트를 보냈을 떄 이를 수신할 수 있는 처리방법을 구현해놔야한다.

(또한, 모델은 재사용이 가능해야하며 다른인터페이스에서도 변하지 않아야 한다. )

 

 

 

 


 

View: input텍스트 체크박스등 사용자 인터페이스 요소를 나타낸다. 

즉 테이터 및 객제의 입력및 출력을 담당. 데이터를 기반으로 사용자가 보게되는 화면이다

 

모델이 가지고 있는 정보를 따로 저장해서는 안된다.

 

화면에 글을 표시하기 위해 정보를 받게될때, 그 정보를 유지하기위해 임의로 뷰 내부에 저장하면 안된다. 

ex). 원을 화면에 그리라는 명령이 올경우 화면에 원을 표시만 하지 그릴 때 필요한 정보를 저장하면 안된다. 

 

모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 된다.

 

Model처럼 자기 자신의 빼고는 다른 요소는 참조하거나 어떻게 동작하는지 알아서는 안된다.

그저 뷰는 데이터를 받으면 그걸 화면에 표시해주는 역할이라고 생각하자.

 

변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다.

 

Model처럼 변경이 일어났을 때, 누군가에게 변경을 알려줘야 하는 방법을 구현해야 한다.

뷰 화면에서 사용자가 화면에 표시된 내용을 변경하게 되면 이를 모델에게 전달하여 모델을 변경해야 한다.

이 작업을 하기 위해 변경 통지를 구현한다.

(+재사용가능하게끔 설계를 해야 하며 다른 정보들을 표현할 때 쉽게 설계를 해야 한다.)

 


 

Controller: 데이터와 사용자인터페이스 요소들 잇는 다리역할

사용자가 데이터를 수정하는 것에 대한 이벤트를 처리하는 부분

 

모델이나 뷰에 대해서 알고 있어야 한다.

 

Model과 View와 의 차이, 이 둘은 서로의 존재를 모르고 변경을 외부로 알리고 수신하는 방법만이 가지고 있는데, 이를 Controller가 중간역할을 해주기 때문에 Model과 그와 관련된 View 에 대해 알고 있어야 한다.

 

모델이나 뷰의 변경을 모니터링 해야 한다.

 

모델이나 뷰의 변경 통지를 받으면 이를 해석하여 각각의 구성 요소에게 통지를 해야 한다.

(+ 애플리케이션의 메인 로직은 컨트롤러가 담당하게 된다.)

 


MVC 사용이유에 대해

사용자가 보는 페이지, 데이터처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤, 이 3가지로 구성되는 하나의 애플리케이션을 만들면 각각 맡은바에만 집중을 할 수 있게 된다.

서로 분리되어 각자의 역할에 집중할 수 있도록 개발을 하고 그렇게 애플리케이션을 만든다면, 유지보수성, 애플리케이션의 확장성, 그리고 유연성이 증가하고, 중복코딩이라는 문제점 또한 사라지게 된다.

 

이 패턴을 사용한 라이브러리나 프레임워크로 프로그래밍을 한다면 훨 수월해질것같다. 

반응형