MVC 패턴이란?

chae._.chae·2021년 11월 13일
0

MVC패턴이라는 말을 같이 앱 개발했던 선배분한테 처음 들었는데 한번 정리해보려고 한다!

MVC패턴은 디자인패턴 중 하나이다.
디자인 패턴이란 프로그램이나 어떤 다른 것을 개발하는 중에 발생했던 문제점들을 정리해 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 규약을 통해 쉽게 쓸 수 있는 형태로 만든 것을 말한다. (즉, 더 쉽고 편리하게 개발할 수 있도록 만든 특정 방법들~! 이라 생각하면 된다.)

MVC란 ?

Model-View-Controller로 하나의 어플리케이션을 만들때 구성요소를 세가지 역할로 구분한 패턴이다.
MVC에서 모델은 어플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스와 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호작용을 관리한다.

정리하면, 프로그램을 구성하는 요소들을 데이터, 화면, 컨트롤로 나누어서 각자의 역할을 부여해 각자의 일에 충실할 수 있도록 해주는 것이다. (다른 요소를 수정하지 않으면서 유지보수가 편해진다고 한다.)

그림처럼 USER가 Controller를 조작하면, controller는 model을 통해서 데이터를 가져오고, 그 데이터를 바탕으로 사용자에게 보여지는 화면을 담당하는 view를 제어해서 사용자에게 전달해준다.

Model

모델은 데이터를 가진 객체이다.
어플리케이션의 정보, 데이터를 나타낸다.

  • Model은 DTO와 DAO로 분류할 수 있다. (다음에 정리해보는 걸로!!)

  • 1) 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
    네모 박스로 예를 들면, 박스의 위치정보, 박스의 내용, 크기 정보 등을 가지고 있어야 한다.

  • 2) 뷰나 컨트롤러에 대한 정보는 없어야 한다.

  • 3) 변경이 일어나면, 변경 통지를 어떻게 처리할 것인지 구현해야 한다.

View

화면에 표시되는 글자, 체크박스 등과 같은 사용자 인터페이스(시각적인) 요소를 지칭한다.
사용자가 보는 화면에 입출력 과정 및 결과를 보여주는 역할을 한다.

  • 1) 모델이 가지고 있는 정보를 따로 저장하면 안된다.
    화면에 나타내기 위해 모델이 갖고 있는 정보를 넘겨받는데, 그 정보를 유지하기 위해서 임의의 뷰 안에 저장해서는 안된다. 단순히 네모 박스를 그리라는 명령을 받으면, 화면에 표시하기만 하고 그 화면을 그릴 때 필요한 정보들은 저장하면 안된다.

  • 2) 모델이나 컨트롤러에 대한 정보는 없어야 한다.

  • 3) 변경이 일어나면, 변경 통지를 어떻게 처리할 것인지 구현해야 한다.

Controller

model과 view를 연결시켜주는 다리 역할을 한다.
사용자가 데이터를 클릭하고, 수정하는 것에 대한 이벤트를 처리한다.

  • 1) 모델이나 뷰에 대해 알아야 한다.
    모델이나 뷰는 서로에 대한 정보가 없는데, 이를 컨트롤러가 중간에서 알려준다.

  • 2) 모델이나 뷰의 변경을 모니터링 해줘야 한다.
    모델이나 뷰가 변경되면, 이를 각각의 구성요소에게 알려준다.

그렇다면 MVC패턴을 사용하면 뭐가 좋은가?

사용자가 보는 페이지, 데이터처리, 그리고 이 두개를 중간에서 제어해주는 컨트롤
이렇게 3가지로 구성되는 하나의 어플리케이션을 만들면, 각자 역할이 정해져 있기에 각자의 역할에만 집중할 수 있게 된다. 분업해서 일을 처리하면 효율적이게 할 수 있다.
유지보수성, 어플리케이션의 확장성, 유연성이 증가하고, 중복코딩(이게뭐지?)이라는 문제점이 해결된다고 한다.

어떻게 나눌 것인가? -> 가이드라인을 제시해 주는게 MVC패턴이다.


당연히 단점 도 존재한다.
한 모델은 여러개의 뷰를 가질 수 있고, 반대로 컨트롤러를 통해서 뷰에 연결되는 모델도 여러개인 경우가 존재한다. 이렇게 되면 뷰와 모델은 서로 의존성을 띄게 된다.
컨트롤러에 다수의 모델과 뷰가 복잡하게 연결되어 있는 상황이 생길 수 있다.

이렇게 MCV의 규모가 너무 복잡하고 커지면, 새 기능이 추가될 때마다 매번 의존성을 신경쓰며 만들어줘야 하므로 한계점이 드러난다. (->이런 형태를 Massive ViewController 라고 한단다..)
서로 강하게 연결되어 있으면 분리하기가 어렵고, 유지보수와 테스트에 있어서 어려움을 겪을 가능성이 커진다. 이런 단점을 갖고 있기에 MVC로부터 파생된 다른 패턴들이 있는데, 이건 나중에 공부해보자.(아따 공부할거 짱많네)

profile
안녕하세용

0개의 댓글