"모델-뷰-컨트롤러 패턴"의 두 판 사이의 차이

 
(사용자 2명의 중간 판 44개는 보이지 않습니다)
1번째 줄: 1번째 줄:
==개요==
==개요==
;Model–View–Controller, MVC
;Model–View–Controller (MVC)
;모델-뷰-컨트롤러, MVC 패턴
;모델-뷰-컨트롤러, MVC 패턴  
*UI와 로직이 분리되어 한쪽 모듈 수정시 서로 영향 적음.<ref>화면구성(UI)은 View가, 로직은 Controller가 담당하도록 함</ref>
* UI와 로직이 분리되어 한쪽 모듈 수정시 서로 영향 적음.<ref>화면구성(UI)은 View가, 로직은 Controller가 담당하도록 함</ref>
*소프트웨어 아키텍처<ref>MVC는 디자인 패턴 중 하나로 볼 수도 있지만, 가장 큰 틀이 되므로 소프트웨어 아키텍처라고 하는 것이 적절하다.</ref>
* 소프트웨어 아키텍처<ref>MVC는 디자인 패턴 중 하나로 볼 수도 있지만, 가장 큰 틀이 되므로 소프트웨어 아키텍처라고 하는 것이 적절하다.</ref>
*모델(데이터, 로직), 뷰(UI, 디스플레이), 컨트롤러(이벤트 상호작용)
* [[이제는 고전이 된]](?) 전형적인 애플리케이션 OOP 구조
*기능확장, 코드 유지보수가 용이함
* 소위 [[소프트웨어 프레임워크]]라고 하는 것들이 대부분 이 구조이다.
* 별도의 프레임워크를 사용하지 않더라도 이 구조로 설계된 소프트웨어들이 많다.
* 기능확장, 코드 유지보수가 용이하다.
* 유저 인터페이스와 비지니스 로직을 분리할 수 있다.
* DRY 유지, 코드 관리가 편리하다.
* MVC 패턴에는 [[옵저버 패턴]], [[전략 패턴]], [[컴포지트 패턴]]가 복합적으로 적용되어 있다.
 
{| class='wikitable'
! [[디자인 패턴]] !! 설명
|-
| [[옵저버 패턴]] || 모델이 변경되는 경우, 뷰에 반영된다. (단 웹 애플리케이션의 경우 사용자의 요청시에만 화면이 갱신된다면 옵저버 패턴은 없을 수도 있다.)
|-
| [[전략 패턴]] || 뷰는 받은 입력의 처리를 특정 컨트롤러를 선택·위임한다.
|-
| [[컴포지트 패턴]] || 뷰는 자체적으로 계층적인 UI 요소들로 구성된다.
|}
 
==구성==
{| class='wikitable'
! 요소 !! 설명
|-
| 모델
|
* "데이터 처리는 여기서..."
* 데이터 구조 표현
* 기능과 데이터 제공
* [[비즈니스 로직]](+[[DAO]]) 담당 ★
* 데이터를 추출, 입력, 갱신하는 함수 포함
|-
|
|
* "사용자에게 보이는 것들은 여기에..."
* 모델의 상태 출력
* 사용자에게 응답
* 사용자에게 보이는 부분
* 웹페이지 또는 그 일부, RSS 등의 출력
|-
| 컨트롤러
|
* "뭔가 이벤트가 발생해서 일을 해야 한다면 여기서 컨트롤..."
* 사용자 입력<ref>물론 사용자 입력을 직접 받는 곳은 View이다. 컨트롤러는 해당 이벤트의 실질적인 처리를 담당함</ref> 처리
* 모델이나 뷰를 변경
* 모델과 뷰 사이에서 동작하며 비즈니스 로직 처리
* 핵심적인 흐름
|}


https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/ModelViewControllerDiagram2.svg/320px-ModelViewControllerDiagram2.svg.png
https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/ModelViewControllerDiagram2.svg/320px-ModelViewControllerDiagram2.svg.png


==구성==
https://s3-ap-northeast-1.amazonaws.com/opentutorialsfile/module/327/1262.png
*모델
 
:기능과 데이터를 제공함
http://2.bp.blogspot.com/-QQoCVjg4ivI/T8HCC9hCR9I/AAAAAAAAANs/Y_Oxo8yRqjs/s1600/1.PNG
*뷰
 
:모델의 상태를 출력함
==웹애플리케이션 MVC ★==
*컨트롤러
* 웹 애플리케이션에서 MVC의 일반적인 형태
:사용자 입력을 처리함
https://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Router-MVC-DB.svg/550px-Router-MVC-DB.svg.png
 
==변형판==
*[[계층적 MVC]] (HMVC)
*[[모델--어댑터 MVA]]
*[[모델-뷰-프리젠터 MVP]]
*[[모델-뷰-뷰모델 MVVM]]


==같이 보기==
==같이 보기==
*[[옵저버 패턴]]
{{z컬럼3|
*[[모델 2 아키텍처]]
* [[전략 패턴]]
*[[JSP]]
* [[옵저버 패턴]]
*[[PHP MVC]]
* [[아키텍처 패턴]]
*[[안드로이드 MVC]]
* [[JSP 모델 1, 모델 2 아키텍처]]
*[[HMVC]]
* [[PHP MVC]]
 
* [[스프링 MVC]]
==주석==
* [[관심사의 분리]]
<references/>
* [[레일즈 아키텍처]]
* [[안드로이드 MVC]]
* [[MVC 게시판 만들기 일반절차]]
}}


==참고 자료==
==참고==
*http://en.wikipedia.org/wiki/Model–view–controller
* {{위키백과|모델-뷰-컨트롤러}}
* {{영어위키백과|Model–view–controller}}
* https://github.com/mdy0501/Model2_Board


[[분류: 디자인 패턴]]
[[분류: 디자인 패턴]]
[[분류: 소프트웨어 아키텍처]]
[[분류: 소프트웨어 아키텍처]]

2022년 7월 11일 (월) 17:38 기준 최신판

1 개요[ | ]

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

2 구성[ | ]

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

 

 

 

3 웹애플리케이션 MVC ★[ | ]

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

 

4 변형판[ | ]

5 같이 보기[ | ]

6 참고[ | ]

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