[Design Pattern] MVC
디자인 패턴
객체지향 개발자들이 사용하는 BP(Best Practices)를 모아놓은 것. 개발하면서 직면했던 문제들에 대한 해결책을 담고 있으며, 이는 오랜 기간에 걸쳐 trial & error를 통해 얻어진 것들이다.
MVC 패턴이란?
Model + View + Controller
애플리케이션의 구성을 세 가지 관심사로 구분한 패턴이다.
사용자에게 보여지는 UI와 Business Logic을 분리하여 서로 영향없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있게 된다.
🎈Model
data와 data를 처리하는 부분
- 객체 혹은 Java의 POJO.
- View 혹은 Controller를 참조하는 내부 속성을 가지면 안된다(직접 수정 방지).
- 변경이 일어났을 때 Controller에 알려주는 부분이 구현되어야 한다.
🎈View
화면을 구성해주는 부분
- Model이 가지고 있는 데이터의 표현을 해주는 요소.
- 데이터를 따로 저장하지 않고, 받은 데이터를 단순 표현만 해야한다.
- Model에 질의를 해서 자신을 업데이트하는 부분이 구현되어야 한다.
🎈Controller
사용자의 입력을 받고 처리하는 부분
- 사용자의 입력을 받고, validate 하는 역할.
- Model로 흘러가는 data flow를 통제(control)하고, Model에 변경이 일어날때마다 업데이트가 일어날 View를 선택 해준다.
- 이로써 Model과 View를 분리해주는 역할을 한다.
- Model과 View의 변경을 모니터링 한다.
동작순서
- 사용자 입력을 Controller가 감지, validate
- Controller가 action을 확인하고 business logic을 수행(Model을 조작).
- Controller에서 해당 action 후에 보여줄 View를 선택
- View가 Model을 이용하여 화면 표시
Controller의 역할은 보여줄 View를 선택하는것 까지이기 때문에, View는 Model의 메소드를 이용해 데이터를 가져오게 된다.
View를 업데이트하는 방식 3가지
- Model class를 직접 사용
- Model이 자신의 Observer로 등록된 View들에게 notify
(Observer 패턴). - View의 polling을 통한 변경 감지 & 업데이트
MVC 패턴의 특징
Controller와 View의 관계가 1:1이 아닌 1:N이다.
따라서 애플리케이션의 사이즈가 커질수록 Controller의 부담은 늘어만 가고, 이게 병목이 될 수 있다.
이런 상황을 풍자해 Massive ViewController라고 한다(이니셜은 같네).
그리고 View가 업데이트를 해야할때 Model을 이용하는 구조이기 때문에, Model과 View의 의존성이 높은 패턴이라고 할 수 있다.
Leave a comment