사실 객체지향 설계를 처음 접하기 이전부터 MVC 모델에 대한 개념적인 지식은 한번쯤 접해 보았을 것입니다가장 기본적인 정의를 설명하자면 M( Mode ) ApplicationBusiness Logic , 객체 또는 데이터의 가공을 책임지는 컴포넌트들의 집합체이고 C ( Control )이란 객체 또는 데이터의 흐름을 책임지는 컴포넌트 , V( View )는 객체 또는 데이터의 생성을 책임지는 컴포넌트로써 일반적으로 Data의 입력 부분과 출력 부분을 담당합니다

하지만 MVC 모델을 설명한 대부분의 설명서를 보면 위와 같이 너무 기본적인 정의에만 초점을 두고 있어 초급 개발자들은 자신이 개발해야 할 프로그램에서 어는 부분을 M으로 V C로 나누어야 할지 개념을 잡기 힘들뿐만 아니라 설사 각각의 업무에 맞게 class를 만들었다 하더라도 각각의 컴포넌트또는 Class ) 사이의 관계를 어떻게 설계해야 할지 판단하기 힘든 상황이 발생하게 됩니다이런 어려움을 가지고 있는 초급 개발자에게 조금이나마 도움이 될까 하여 MVC모델에 대한 개괄적인 내용을 아래와 같이 설명하고자 합니다

1.       M, V, C 전체 개념보기

2.       M, V, C 나누기

3.       M, V, C에 관계 적용하기


1.       M, V, C 전체 개념보기

Model은 객체나 Data의 가공을 책임지는 컴포넌트

View는 객체나 Data의 생성입력( User Action ), 출력( Display )을 책임 지는 컴포넌트

      Control은 객체나 Data의 흐름을 책임지는 컴포넌트

View
먼저 데이터객체 )의 입력과 출력을 담당하는 View는 필요에 따라 Model로부터 객체의 상태를 요청할 수 있고 응답 받은 상태에 따라 다른 출력 형식을 가지 수 있으며 Controller에게 전달 시 상태정보를 같이 보낼 수 있습니다여기서 중요한 것은 Model로부터 응답 받은 객체의 상태에 의해 View가 직접 제어가공을 하는일이 없도록 해야 합니다다시 말하면 View는 상태에 따라 출력형식만 다르게 가야하고 모든 제어나 가공은 Controller에게 위임을 해야 합니다.
Controller

객체 또는 데이터의 흐름을 책임지는 Controller는 활성화 된 View로부터 넘겨 받은 메시지(User Action) 또는 객체를 파악하여 해당 객체를 어떤 Model로 전달할지를 결정하고 필요한 객체를 데이터를 가공할 Model로 전달합니다기본 MVC 모델에서는 Model에서 Controller쪽으로 Event를 보낼 수 없도록 되어 있지만 구현참조가 아니라 인터페이스 참조일경우 Model에서 Controller쪽으로 Event를 보낸는것이 오히려 MVC 모델 흐름을 더욱 유연하게 만들기도 합니다.

Model

Model Controller로부터 전달받은 객체 또는 데이터를 Application의 Business Logic에 따라 가공처리하는 책임을 가지고 있으며 필요에 따라 View Controller에게 변경된 객체의 상태를 전달하게 됩니다.


1.       M, V, C 나누기

간단한 예를 통한 MVC 도출

 ) Database을 이용해서 고객정보를 읽고 쓰는Application


       
Cust_Dlg ( View )      고객 정보를 입력 또는 출력하는 GUI 관련 class

       Cust_Ctrl (Controller )  :  GUI로부터 입력 받은 고객 정보 데이터 또는 객체를 Model로 전달받는 Class

       Cust_DB ( Model ) : Controller로부터 전달 받은 객체 또는 데이터를 DB에 입력 또는 조회하는Class


 

2.       M, V, C에 관계 적용하기

 

3.       결론

M. V. C 모델의 궁극적인 목적은 각각의 컴포넌트에 대해 역할을 서로 독립적으로 부여하고 또한 각각의 컴포넌트의 관계는 구연 참조가 아니라 인터페이스 참조로 설계하여 차후 새로운 요구사항에 대해 최소한의 비용으로 보다 유연하게 대처하고자 하는 목적이며 이는 객체 지향 설계방법의 기본적인 목적이기도 합니다.



+ Recent posts