디자인패턴_MVC Pattern

2020. 12. 31. 13:162021/JOB DA STUDY

MVC 패턴을 사용하는 이유?

사용자가 보는 페이지, 데이터의 처리 그리고 이 두가지를 중간에서 제어하는 컨트롤 

이 3가지로 구성된 하나의 애플리케이션을 만들기 위해서는 서로 분리되어 각자의  역할에 집중할 수 있게끔 개발을 하고, 애플리케이션을 만들어야 유지보수성, 애플리케이션의 확장성, 유연성이 증가하고, 중복코딩의 문제점 또한 사라지게 된다. 

(비즈니스 처리 로직사용자 인터페이스 요소들을 분리시켜 서로의 영향을 받지않고 개발하기 쉽다.)

 

MVC란

Model, View, Controller 의 약자로 하나의 프로젝트를 구성할 때, 그 구성요소를 세가지의 역할로 구분한 패턴

 

 

사용자가 Controller를 조작하면 Model을 통해 데이터를 가져오고, 그 정보를 바탕으로 시각적 표현을 담당하는 View를 제어하여 사용자에게 전달한다. 

 

모델(Model)

애플리케이션이 "무엇"을 할 것인지 정의 (내부 비즈니스 로직을 처리하기 위한 역할)

애플리케이션의 정보, 처리되는 알고리즘, 데이터 (DB, 처음 정의하는 상수, 초기화값, 변수 등)를 뜻한다.

또는 이러한 데이터, 정보들의 가공을 책임지는 컴포넌트를 말한다.

 

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

화면안의 네모박스에 글자가 표현된다면, 네모박스의 화면 위치 정보/네모박스의 크기정보/글자의 내용/글자의 위치/글자의 포맷 정보 등을 가지고 있어야한다.

 

  • View, Controller에 대해 어떤 정보도 알지 말아야한다.

데이터 변경이 일어났을 때 모델에서 화면 UI를 직접 조정해서 수정할 수 있도록 뷰를 참조하는 내부 속성값을 가지면 안된다.

 

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

Model의 속성 중 텍스트 정보가 변경되었다면, 이벤트를 발생시켜 누군가에게 전달해야하며, 누군가 모델을 변경하도록 요청하는 이벤트를 보냈을때 이를 수신 할 수 있는 처리 방법을 구현해야한다. 또한 모델은 재사용 가능해야하며 다른 인터페이스도 변하지 않아야한다.

 

뷰(View)

화면에 "무엇인가"를 보여주기 위한 역할 (모델이나, 컨트롤러가 보여주고자 하는 

input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타낸다.

즉, 데이터 및 객체의 입력과 출력을 담당

데이터를 기반으로 사용자들이 볼 수 있는 화면

 

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

화면에 글자를 표시하기 위해 모델이 가지고 있는 정보를 전달 받게 될텐데, 그 정보를 유지하기 위해 임의의 View 내부에 저장하면 안된다. 단순히 네모 박스를 그리라는 명령을 받으면, 화면에 표시하기만 할 뿐, 그 화면을 그리는데 필요한 데이터는 저장하지 않아야한다.

 

  • Model이나 Controller와 같이 다른 구성요소들을 몰라야 한다.

Model과 같은 자기 자신을 빼고는 다른 요소는 참조하거나 어떻게 동작하는지 알아서는 안된다. 그냥 View는 데이터를 받음 화면에 표시해주는 역할만 가지고 있다.

 

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

Model과 같이 변경이 일어났을때 누군가에게 변경이 일어났음을 알려줘야하는 방법을 구현해야한다. View에서는 화면에서 사용자가 화면에 표시된 내용을 변경하게 되면 이를 Model에게 전달해 모델을 변경할 것이다.

이 작업을 하기 위해 변경 통지를 구현해야하며 재사용이 가능하게끔 설계를 해야하고, 다른 정보들을 표현할때 쉽게 설계해야한다.

 

컨트롤러(Controller)

모델이 "어떻게" 처리할 지 알려주는 역할 (모바일에서는 화면의 로직처리 부분)

따라서 사용자가 데이터를 클릭하고, 수정하는 것에 대한 이벤트를 처리하는 부분을 뜻한다.

화면에서 사용자의 요청을 받아서 처리되는 부분을 구현하며, 요청 내용을 분석해 Model과 View에 업데이트를 요청

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

 

  • Model이나 View에 대해 알고 있어야한다.

Model이나, View는 서로의 존재를 모르고, 변경을 외부로 알리고 수신하는 방법만 가지고 있는데 

이를 Controller가 중재하기 위해 Model과 그에 관련된 View에 대해 알고있어야한다.

 

  • Model이나 View의 변경을 모니터링 해야 한다.

Model이나 View의 변경 통지를 받으면 이를 해석해서 각각의 구성 요소에게 통지해야한다. 또한 애플리케이션의 메인 로직은 컨트롤러가 담당하게 된다.

 

 

 

 

 

 

 

 

 

'2021 > JOB DA STUDY' 카테고리의 다른 글

Static  (0) 2021.01.05
Design Pattern  (0) 2021.01.05
NoClassDefFoundError 와 ClassNotFoundException  (0) 2020.12.29
InputStream and OutputStream  (0) 2020.12.28
3주차 과제: 연산자  (0) 2020.12.27