본문으로 이동

모델-뷰-컨트롤러

위키백과, 우리 모두의 백과사전.
Grungequeen (토론 | 기여)님의 2008년 1월 25일 (금) 16:02 판 (새 문서: ==MVC(Model/View/Controllr)패턴== MVC패턴은 Smalltalk에서 그래픽 인터페이스와 실제로 동작하는 코드를 분리하기 위해 개발되었다 지금은 다른 객체...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

MVC(Model/View/Controllr)패턴

MVC패턴은 Smalltalk에서 그래픽 인터페이스와 실제로 동작하는 코드를 분리하기 위해 개발되었다 지금은 다른 객체지향언어에서도 널리 사용되는 패턴 중 하나이다.

모델(Model)

모델이란 어떠한 동작을 수행하는 것을 코드를 말한다. 표시형식에 의존하지 않는다. 즉 사용자에게 어떻게 보여질지에 대해 신경쓰지 않아도 된다. 모델은 순수하게 public 함수로만 이루어진다. 몇몇의 함수들은 사용자의 질의(query)에 대해 상태 정보를 제공하고 나머지 함수들은 상태를 수정하는 함수이다.

뷰(View)

MVC에서 모델은 여러개의 뷰를가질 수 있다. 뷰는 모델에게 질의를 하여 모델로 부터 값을 가져와 사용자에게 보여준다.


컨트롤러(Controllers)

MVC의 뷰는 여러개의 컨트롤러를 가지고 있다. 사용자는 컨트롤러를 사용하여 모델의 상태를 바꾼다. 컨트롤러는 모델의 mutator함수를 호출하여 상태를 바꾼다. 이때 모델의 상태가 바뀌면 모델은 등록된 뷰에 자신의 상태가 바뀌었다는 것을 알리고 뷰는 거기에 맞게 사용자에게 모델의 상태를 보여준다.

원리

자바언어에서 모델은 java.util.Observable을 extends 하여 만들수 있다. 모델에는 현재의 상태 정보를 변경하거나 다른 클래스에게 알릴 수 있는함수가 있어야 한다. 모델의 상태를 변경하는 함수(mutator)는 setChanged()와 notifyObservers()를 호출하여야 한다. NotifyObser는 모델에 등록된 모든 뷰에게 업데이트 메세지를 보내게 된다. 뷰는 java.util.Observer를 implement하여 만들면 update method를 구현할 수 있다. update함수의 두번째 매개변수는 Objectㄹ 모델에서 넘어온 추가정보를 받는데 사용된다.

interface Observer { void update(Observable t, Object o); }

뷰는 반드시 모델에게 질의하여 업데이트하는 부분이 구현되야 한다. 모델은 addObserver라는 함수를 이용하여 뷰를 자신에게 등록시킨다. 모델은 자신에게 등록된 모든 뷰를 기억하고 있다가 자신의 상태가 바뀌게 되면 등록된 모든 뷰에 notify함수를 호출하여 뷰를 update시킨다. 모델은 여러개의 뷰를 가질 수 있다. MVC에서는 이것을 허용하고 있다. 또한 뷰도 여러개의 모델에 등록될 수 있다.

참고자료

Building GUI with the MVC pattern [1]