Programming

MVC 패턴 그게 뭔데, 어떻게 하는건데?

다애루 2021. 4. 20. 12:50

 

M V C

 

MVC는 'model–view–controller'의 약어로서,  
소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴을 말한다.

 

Model, View, Controller 세 부분으로 나눠지며,

사용자 인터페이스로부터 비즈니스 로직(사용자의 요청을 처리하는 부분)을 분리한다.

즉, 어떤 특정한 역할들에 대해 역할분담을 할 때 가이드라인을 제시하는 방법 중 하나이다.

애플리케이션의 시각적 요소와 서로 영향 없이

쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. 

 

Model : 애플리케이션의 정보(데이터)
View : 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소
Controller : 데이터와 비즈니스 로직 사이의 상호동작을 관리


뷰에 대한 행동 / 사용자가 재생 버튼을 클릭

뷰에서 컨트롤러에게 사용자가 한 행동을 알려줌

컨트롤러에서 모델에게 상태를 변경하라는 요청을 함

컨트롤러는 사용자가 한 행동에 대해 무엇을 의미하는지 분석하고

그 행동에 따라 모델을 어떤식으로 조작해야하는지 결정.

뷰에서 모델한테 상태를 요청.

뷰에서 화면에 표시할 상태는 모델로부터 직접 가져온다.

( 예를 들어 모델에서 뷰한테 새로운 곡이 재생되기 시작했다고 알려주면

뷰에서는 모델한테 곡 제목을 요청하고 그것을 받아 화면에 표시한다.)

 


M o d e l


프로그램이 작업하는 세계관의 요소들을 개념적으로 정의한 것으로,

어떠한 동작을 수행하는 코드를 말한다.


다시 말해, 사용자에게 어떻게 보일지에 대해 신경쓰지 않아도 된다. 
모델은 순수하게 public 함수로만 이루어진다.
몇몇 함수들은 사용자의 질의(query)에 대해 상태 정보를 제공하고 
나머지 함수들은 상태를 수정한다.

모델은 여러 개의 뷰(view)를 가질 수 있다. 


프로그램이 목표하는 작업을 원활하게 수행하기 위해 필요한

물리적 개체, 규칙, 작업등의 요소들을 구분되는 역할로써 정의해놓은 것이 Model이 된다. 

 

return A + B 이처럼 간단한 것(DTO)부터 시작해서

DB 접속 후 데이터를 처리하는 것(DAO)도 모델이 된다.

모델 각각의 함수(기능)의 크기는 작고 재사용성이 커야 좋은 코드라고 볼수도 있다.

주의할 점은 Model은 Controller의 의해 작동하고 Controller에게 값을 넘겨준다.


Model은 DTO와 DAO로 분류할 수 있다.

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

뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.

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


DAO / DTO / VO

 

DAO :  Data Access Object  / method 집합

DataBase사용해서 데이터를 조작하는 기능을 전담하도록 만든 오브젝트사용자가 자신에게 필요한 interface를 DAO에게 던지고DAO는 이 인터페이스를 구현한 객체를 시용자에게 편리하게 사용할 수 있도록 반환해준다.장점 : DB에 대한 접근을 DAO가 담당하도록 해서 다수의 원격호출을 통한오버헤드를 VO or DTO를 통해서 줄일 수 있다.

 

DTO : Data Transfer Object  / 변수들의 집합

계층(컨트롤러,  뷰 등)간 데이터 교환(전송)을 위한 객체

일반적인 DTO는 로직을 갖고 있지 않은 순수한 데이터 객체이다.속성과 그 속성에 접근하기 위한 getter, setter 메소드만 가진 클래스이다.

 

VO : Value Object

데이터 그 자체로 의미 있는 것을 담고 있는 객체.

Real-Only 속성 객체

사용 되는 값이 객체로 표현 되며값 변경이 없는 경우를 말한다.


V i e w

 

화면에 무엇인가를 '보여주기 위한 역할'로서,

사용자가 보는 화면에 입출력 과정 및 결과를 보여준다.

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

 

사용자가 볼 결과물을 생성하기 위해 질의를 통해 모델로부터 정보를 얻어 오고

최종적으로 얻어 온 값이 담긴 view단을 화면(UI)을 통해 사용자에게 보여준다.

뷰는 여러개 생성이 가능하다. 

 

# View 구현 시 지켜야할 점 

모델과 컨트롤러의 어떤 것도 알고 있으면 안된다. 
단지 데이터를 전달 받으면 화면에 표시(출력)해주는 역할만 담당해야한다.

변경이 일어났을 때 변경을 알려주는 방법을 구현해야 한다.
뷰에서는 화면에서 사용자가 화면에 표시된 내용을 변경하게 되면,
모델에게 전달해서 모델을 변경해야 하며, 이를 위해 변경 통지를 구현한다.

 


Controller

 

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

컨트롤러는 모델에 명령을 보냄으로써 모델의 상태를 변경할 수 있다. ex) 워드 프로세서에서 문서 편집
컨트롤러가 관련된 뷰에 명령을 보냄으로써 모델의 표시 방법을 바꿀 수 있다. 

 

모델은 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다. 

이와 같은 통보를 통해서 뷰는 최신의 결과를 보여줄 수 있고,
컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가 제거 수정할 수 있다.

애플리케이션의 메인 로직은 컨트롤러가 담당한다.

 

 


 

M V C 의 장점

 

① 사용자가 보는 페이지 - View

데이터처리 - Model

③ 위의 2가지를 중간에서 제어하는 - Controller 

세 부분으로 구성되는 하나의 애플리케이션을 만들면 각자의 역할에만 집중할 수 있게 된다. 
서로 분리되어 각자의 역할에 집중할 수 있게끔하여 개발을 하고 만든다면

유지보수성, 확장성, 유연성이 증가하고, 중복코딩이라는 문제점 또한 사라지게 된다.

 

M V C 의 한계

프로그램 특성상 화면이 복잡한 화면과 데이터의 구성 필요한 구성이라면,
Controller에 다수의 Model과 View가 복잡하게 연결되어 있는 상황이 생길 수 있다.
이럴 경우 MVC 규모 자체가 너무 복잡하고 비대해진다. 
새 기능을 추가할때마다 의존성을 일일이 해결해야해서 메소드 분석이나 테스트도 어렵게 된다. 
이런 형태의 MVC를 MVC의 한계를 표현한 용어, 'Massive-View-Controller'라고 부른다.

 

 


참고자료


 

MVC 패턴은 아직도 많이 어렵게 느껴진다..

프로그래밍을 배우면서 서로 연관된 파일이 많아지는데 개념을 제대로 숙지하지 않은 상태로 단순히 로직만 짠다면

어느 데이터가 어디에서 온거고 어디로 가야하는지 흐름을 파악하기 어려울 것이다.

나 또한 여러번 코드를 보면서 공부해야할 것 같다... 

 

 


 

프로그래밍 공부를 위해 여러 자료들을 토대로 작성한 기록입니다.

개인 공부에만 사용해주시고, 상업적인 활용과 재배포를 금지합니다.