MVC 디자인패턴
- 유저가 입력한 데이타와 외부 출력을 위한 모델, 유저의 응답 처리하는 세 가지 타입 오브젝트로 명백히 구분하고, 각 오브젝트들은 자신이 맡은 임무에 대해서만 책임진다.
디자인패턴 구성
Model의 책임과 임무
- 모델은 속성에 데이터를 저장하고 외부로부터 데이터를 가져오거나 설정하는 메소드를 제공한다. 애플리케이션에서 상황에 맞게 메소드를 변형하고, 컨트롤러와 뷰가 메소드를 반드시 알고 있어야 한다.
또한 모델은 뷰를 등록하고 해지할 수 있는 방법을 제공해야 하며, 모델은 등록된 뷰의 목록을 관리해야 한다. 모델은 내부의 정보에 변화가 생길 때마다, 자신에게 등록된 모든 뷰에게 그 사실을 알려주어야 한다.
Model의 기본구조
- 모델은 기본적으로 옵저버 클래스를 상속받으므로써, 뷰를 등록하고 관리하는 기능을 물려받는다.
package
{
public class Observable implements IObservable
{
public function Observable() {}
public function addObserver(): Boolean {}
public function removeObserver(): Boolean {}
public function notifyObserver(): void {}
}
}
package
{
public class Model extends Observable
{
public function Model() {}
public function setData(): void {} //임시사용메서드
.
.
이하 필요한 메서드 정의
}
}
View의 책임과 임무
- 뷰는 반드시 UI를 생성하고, 해당 인터페이스에 최신 정보를 반영해야 한다. 뷰는 모델의 상태 변화를 예의 주시하며, 모델에 변화가 생길 때, 뷰는 변화를 인터페이스에 반영하여 업데이트 한다.
뷰들은 입력 이벤트를 해당 컨트롤러에게 전달해야 하는데, 뷰 스스로 입력을 처리해서는 안된다.
View의 기본구조
- 뷰는 기본적으로 생성될 때 모델과 컨트롤러를 인자로 넘겨받는다.
package
{
public class View implements IObserver
{
public function View(m: Observable, c:Controller)
{
}
public function update(m:Obserable, infoObj: Object): void
{
//update 메서드를 통해 모델로부터 데이터를 넘겨받는다.
}
}
}
Controller의 책임
- 컨트롤러는 유저 입력에 따라 뷰로부터 변경 사항을 전달받아, 이를 해석하고 모델을 변경한다. 외형상의 변화만 필요하고 모델에게 아무런 영향을 주지 않는 경우, 변경 사항이 직접 뷰에게 전달될 수 있다.
package
{
public class Controller
{
public function Controller(m:Observable)
{
}
}
}
MVC 사용법
//모델생성
var m: Model = new Model();
//컨트롤러 생성
var c: Controller = new Controller(m);
//뷰생성
var v1: View = new View(m, c);
var v2: View = new View(m, c);
//모델에 뷰 등록
m.addObserver(v1);
m.addObserver(v2);
//데이터설정
m.setData("데이터값");
유저 인터페이스를 관리하는 코드를 모델, 뷰, 컨트롤러 클래스로 분리함으로써 얻는 이점은 다음과 같다.
1. 동일한 정보로부터 다양한 표현들을 만들어 낼 수 있다.
2. 컴파일타임과 런타임에서 유저 인터페이스를 손쉽게 추가, 제거, 변경할 수 있다.
3. 컴파일타임과 런타임에서 유저의 입력에 대한 반응을 변경하기가 쉽다.
4. 재사용이 용이하다.
5. 다수의 개발자들이 다른 소스 코드에 영향을 주지 않고 애플리케이션의 입력, 인터페이스, 로직 등을 동시에 업데이트할 수 있다.
6. 개발자가 애플리케이션의 부분에만 집중하여 작업할 수 있도록 도와준다.
'디자인 패턴' 카테고리의 다른 글
디자인패턴 : Observer (0) | 2011.08.03 |
---|---|
디자인패턴 : Singleton (0) | 2011.08.03 |
디자인패턴 : Command (0) | 2011.08.03 |
디자인패턴 : Composite (0) | 2011.08.03 |
디자인패턴 : Iterator (0) | 2011.08.03 |