모델-뷰-컨트롤러 패턴


개요

Model–View–Controller (MVC)
모델-뷰-컨트롤러, MVC 패턴
  • UI와 로직이 분리되어 한쪽 모듈 수정시 서로 영향 적음.[1]
  • 소프트웨어 아키텍처[2]
  • 이제는 고전이 된(?) 전형적인 애플리케이션 OOP 구조
  • 소위 소프트웨어 프레임워크라고 하는 것들이 대부분 이 구조이다.
  • 별도의 프레임워크를 사용하지 않더라도 이 구조로 설계된 소프트웨어들이 많다.
  • 기능확장, 코드 유지보수가 용이하다.
  • 유저 인터페이스와 비지니스 로직을 분리할 수 있다.
  • DRY 유지, 코드 관리가 편리하다.
  • MVC 패턴에는 옵저버 패턴, 전략 패턴, 컴포지트 패턴가 복합적으로 적용되어 있다.
디자인 패턴 설명
옵저버 패턴 모델이 변경되는 경우, 뷰에 반영된다. (단 웹 애플리케이션의 경우 사용자의 요청시에만 화면이 갱신된다면 옵저버 패턴은 없을 수도 있다.)
전략 패턴 뷰는 받은 입력의 처리를 특정 컨트롤러를 선택·위임한다.
컴포지트 패턴 뷰는 자체적으로 계층적인 UI 요소들로 구성된다.

구성

요소 설명
모델
  • "데이터 처리는 여기서..."
  • 데이터 구조 표현
  • 기능과 데이터 제공
  • 비즈니스 로직(+DAO) 담당 ★
  • 데이터를 추출, 입력, 갱신하는 함수 포함
  • "사용자에게 보이는 것들은 여기에..."
  • 모델의 상태 출력
  • 사용자에게 응답
  • 사용자에게 보이는 부분
  • 웹페이지 또는 그 일부, RSS 등의 출력
컨트롤러
  • "뭔가 이벤트가 발생해서 일을 해야 한다면 여기서 컨트롤..."
  • 사용자 입력[3] 처리
  • 모델이나 뷰를 변경
  • 모델과 뷰 사이에서 동작하며 비즈니스 로직 처리
  • 핵심적인 흐름

320px-ModelViewControllerDiagram2.svg.png

1262.png

1.PNG

웹애플리케이션 MVC ★

  • 웹 애플리케이션에서 MVC의 일반적인 형태

550px-Router-MVC-DB.svg.png

변형판

같이 보기

참고

  1. 화면구성(UI)은 View가, 로직은 Controller가 담당하도록 함
  2. MVC는 디자인 패턴 중 하나로 볼 수도 있지만, 가장 큰 틀이 되므로 소프트웨어 아키텍처라고 하는 것이 적절하다.
  3. 물론 사용자 입력을 직접 받는 곳은 View이다. 컨트롤러는 해당 이벤트의 실질적인 처리를 담당함