- MVC (Model-View-Controller)는 사용자 인터페이스로부터 비즈니스 로직을 분리
- 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 스타일의 아키텍처
- 사용자 인터페이스를 담당하는 계층의 응집력을 높일 수 있음
- 여러 개의 다른 UI를 만들어 그 사이에 결합을 낮출 수 있음
응용프로그램을 서로 상호작용하는 세 가지의 논리적인 구성요소로 나눔
Model
- 데이터와 해당 데이터와 연관된 작업을 관리함
- 데이터의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보함
- 통보를 통해 뷰는 최신의 결과를 보여줄 수 있음
- 컨트롤러는 모델의 변화에 따른 적용 가능한 명령 (추가, 제거, 수정)을 내릴 수 있음
- MVC를 다르게 구현한다면 통보 대신 뷰나 컨트롤러가 직접 모델의 상태를 읽어 오기도 함
View
- 데이터가 사용자에게 표시되는 방법을 정의하고 관리함
- 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어 오는 역할을 함
Controller
- 사용자와의 상호작용 (EX 키보드 입력, 마우스 클릭)을 관리하고 이를 View와 Model에 전달
- 모델에 명령을 보냄으로써 모델의 상태를 변경할 수 있음
EX) 워드 프로세서에서 문서 편집을 담당하는 부분 - 관련된 뷰에 명령을 보냄으로썸 모델의 표시 방법을 바꿀 수 있음
EX) 문서 스크롤
장점
- 느슨한 결합, 확장성
각 컴포넌트의 결합이 약해 다른 부분에 영향을 주지 않고 수정할 수 있음 - 다수의 다른 뷰
하나의 모델을 위해 다수의 다른 뷰를 쉽게 제공할 수 있음
데이터와 비즈니스 로직이 분리되어 코드 중복이 적음 - 비동기
비동기 기술을 이용하여 애플리케이션을 빠르게 로딩할 수 있음
개발자가 각 컴포넌트를 빠르게 개발할 수 있음
단점
- 복잡도
컴포넌트의 분리로 인하여 매커니즘 이해를 위한 복잡도가 올라갈 수 있음 - 비효율성
데이터 모델과 인터랙션이 단순할 경우 MVC 모델을 사용하는 것 자체가 비효율적일 수 있음 - 각 컴포넌트 구현을 위한 여러 가지 기술에 대한 이해가 필요함