250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

MVC 패턴 (모델-뷰-컨트롤러/Model-View-controller) 본문

[Snow-ball]server/스프링(Spring)

MVC 패턴 (모델-뷰-컨트롤러/Model-View-controller)

Snow-ball 2021. 7. 7. 17:54
반응형

컴퓨터 프로그램에서 흔하게 사용되고 많이 듣는 용어가 MVC 모델이다.
MVC모델은 MVC 구조, MVC 패턴, MVC 아키텍처라는 단어로도 사용이 된다.

MVC 패턴은 디자인패턴 중의 하나이다. 디자인 패턴이란 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정의하여 특정한 "규약"을 통해 쉽게 쓸 수 있는 형태로 만들것을 말한다.

밑에 사진은 model과 controller, view 그리고 user가 서로에게 어떻게 영향을 미치는지 표현되어 있는 사진이다.

많은 개발자들이 찾는 MDN에서 찾아볼 수 있는 MVC의 정의이다.
MVC(모델-뷰-컨트롤러)는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다. 소프트웨어의 비지니스 로직과 화면을 구분하는데 중점을 두고 있다. 이러한 "관심사 분리(AOP)"는 더 나은 업무의 분리와 향상된 관리를 제공한다. MVC에 기반을 둔 몇 가지 다른 디자인 패턴으로 MVVM(모델-뷰-뷰모델), MVP(모델-뷰-프리젠터),MVW(모델-뷰-왓에버)가 있다.

MVC 소프트웨어 디자인 패턴의 세 가지 부분은 다음과 같이 설명할 수 있다.
1. 모델: 데이터와 비즈니스 로직을 관리한다.
2. 뷰: 레이아웃과 화면을 처리한다.
3. 컨트롤러: 명령을 모델과 뷰 부분으로 라이팅한다.


간단히 정리하면 프로그램을 구성하는 요소들을 데이터(Model), 화면(View), 컨트롤러(Controller)로 나누어서 각자의 역할을 부여하고, 각자 일에만 충실히 수행하게 한다는 말이된다.

각각이 가진 특징들을 이해해, 구성 요소들의 할일만 구현한다면, 다른 요소를 수정하지 않으면서 유지보수가 편해진다고 한다.

MVC 각각의 개념을 알아보자


모델(Model)
데이터를 가진 객체를 모델이라 지칭한다. 데이터는 내부에 상태에 대한 정보를 가질 수도 있고, 모델을 표현하는 이름 속성으로 가질 수 있다. 데이터의 상태가 변경되면 모델은 일반적으로 뷰에게 알리게 된다. 가끔은 컨트롤러에게 알리기도 한다(업데이트된 뷰를 제거하기 위해 다른 로직이 필요한 경우)

모델은 다음 규칙을 가지고 있다.
1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야만 한다.
- 화면에 네모 박스 안에 글자가 표현 된다면, 네모 박스의 화면 위치 정보, 네모 박스의 크기 정보, 글자 내용, 글자의 위치, 글자의 포멧 정보 등을 가지고 있어야 한다.
2. 뷰(View)나 컨트롤러(ControllerO)에 대해서 어떤 정보도 알지 말아야 한다.
- 데이터 변경이 일어났을 때, 모델에서 화면 UI(View)를 직접 조정해서 수정할 수 있도록 뷰를 참조하는 내부 속성값을 가지면 안된다.
3. 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.
- 모델의 속성 중 텍스트 정보가 변경되면, 이벤트를 발생시켜 누군가에게 전달해야 하며, 누군가 모델을 변경하도록 요청하는 이벤트를 보냈을때 이를 수신할 수 있는 처리 방법을 구현해야 한다. 이는 모델이 변경되는 방법을 다른 구성 요소들에게 알려주게 되는 방법이다.


뷰(View)
화면에 표시되는 글자, 체크박스, 윈도우와 같은 UI라는 시각적 데이터를 보여주는 방식을 정의한다.

뷰에서도 다음 규칙을 이해하고, 사용해야 한다.
1. 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
- 화면에 글자를 표시 하기 위해, 모델 정보를 전달 받게 될텐데, 그 정보를 유지 하기 위해서 임의로 뷰 내부에 저장하면 안된다. 단순히 네모 박스를 그리라는 명령을 받으면, 화면에 표시하기만 하고, 그 화면을 그릴 때 필요한 정보들은 저장하지 않는다는 것이다.
2. 모델이나 컨트롤러와 같이 다른 구성요소를 몰라야 한다.
- 모델과 같이 자기 자신을 빼고는 다른 요소는 참조하거나 어떻게 동작하는지 알아서는 안된다. 그냥 뷰는 데이터를 받으면, 화면에 표시해주는 역할만 가진다고 보면 된다. 철저하게 자신의 역할만 수행해야한다.
3. 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.
모델과 같이 변경이 일어났을때 이에 누군가에게 변경을 알려줘야하는 방법을 구현해야 한다. 뷰에서는 화면에서 사용자가 화면에 표시된 내용을 변경하게 되면 이를 모델에게 전달해서, 모델을 변경해야 할 것이다. 그 작업을 하기 위해 변경 통지를 구현한다. 모델이나 뷰에서 변경이 일어났을때, 이를 컨트롤러에게 알리고, 컨트롤러는 어떻게 처리할지 결정해 다시 다른 구성 요소에서 변경을 알려주는 중재자 같은 역할을 위해 변경 통지 관련 처리 방법을 구현하는 이유이다.


컨트롤러(Controller)
모델과 뷰를 연결해 주는 역할을 한다. 그리고 사용자로부터 입력에 대한 응답으로 모델 및 뷰를 업데이트하는 로직을 포함하고 있고, 주로 비즈니스 로직(문제를 해결하기 위한 과정)을 컨트롤러에서 구현하게 되어있다.

컨트롤러는 다음 규칙을 이해해야 한다.
1. 모델이나 뷰에 대해서 알고 있어야 한다.
- 모델이나 뷰는 서로의 존재를 모르고, 변경을 외부로 알리고, 수신하는 방법만 가지고 있는데, 이를 컨트롤러가 중재하기 위해 모델과 그에 관련된 뷰에 대해서 알고 있어야 한다.
2. 모델이나 뷰의 변경을 모니터링 해야한다.
- 모델이나 뷰의 변경을 통지 받으면, 이를 해석해서 각각의 구성 요소에게 통지를 해야 하는 것이다.






베타존 : 네이버쇼핑 스마트스토어

나를 꾸미다 - 인테리어소품 베타존

smartstore.naver.com

반응형
Comments