1️⃣ MVC 패턴이란?
- Model, View, Controller
- 업무 로직(Business Logic) 및 데이터(Model)와 보이는 부분(View)을 분리
- 뷰와 같은 사용자 인터페이스 로직이 비즈니스 로직보다 더 자주 바뀐다면 MVC를 사용하는 것이 바람직함
- 🌟 화면을 포함하는 사용자 인터페이스와 업무 처리 부분을 분리해서 동작할 수 있도록 함
🔗 MVC 패턴 설계
모델(Model)
: 응용 프로그램의 데이터를 관리하는 부분 또는 로직
뷰(View)
: 사용자가 보는 데이터를 화면에 보이는 부분을 관리
컨트롤러(Controller)
: 사용자의 입력을 처리하고, Model과 View 사이에서 상호 작용을 할 수 있도록 지원
🤭 MVC 패턴은, 데이터가 UI로부터 분리되어 따로 검수하거나 사용하는 것이 가능해진다!
🔗 디자인 패턴
이름
: MVC 혹은 Model-View-Controller
문제
: 데이터와 해당 데이터를 보여주는 부분의 코드가 섞여 있음
해결방안
: 데이터와 뷰를 분리하고 이들을 연동시키는 컨트롤러를 추가
결과
: loose coupling(분리), 재사용성
🔗 MVC 패턴의 변형
1)패시브 모델(Passive Model)
- 컨트롤러만 뷰를 통해 모델을 조작
- 사용자가 인터페이스를 조작하거나 입력하면 컨트롤러가 모델을 수정함
- 모델이 수정된 후에 컨트롤러는 뷰를 업데이트 하도록 요청
- 뷰는 모델에서 데이터를 받아서(요청 후) 화면을 업데이트
- 여기서 업데이트란, 화면을 업데이트하기 위한 모든 데이터 요청(데이터 변경, 데이터 가져오기 등)
2)액티브 모델(Active Model)
- 컨트롤러만이 모델을 수정하는 것이 아님
- 모델에서 뷰를 업데이트하도록 요청하는 것이 가능
- 모델(subject) 이 서브젝트 인터페이스를 제공하고 뷰(observer/subscriber) 에서 옵저버로 등록
- 뷰는 모델에서 데이터를 받아서 (요청 후) 화면 업데이트
2️⃣ MVC 패턴과 자바 Swing
- Model/Delegate 구조를 사용
- 자바 스윙의 컴포넌트들은 모델과 델리게이트로 구성됌
- 각 컴포넌트들은 기본적인 기능을 제공하는 디폴트 모델과 델리게이트를 제공(ex) button, list..)
setModel()
과 setUI()
메소드를 이용해서 모델 또는 델리게이트를 변경 가능
- 뷰와 모델은
subject
- subscriber
의 역할을 함!
- 뷰는 모델에 변경 통지 알림 등록을 하고, 모델에서는 뷰를 업데이트
3️⃣ MVC 패턴과 웹
- 1) 사용자가 웹사이트에 접속
- 2) 컨트롤러는 사용자가 요청한 웹페이지를 서비스 하기 위해서 모델을 호출
- 3) 모델은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 반환
- 4) 컨트롤러는 모델이 반환한 결과를 뷰에 반영
- 5) 데이터가 반영된 뷰는 사용자에게 보여짐
🔗 모델(1)
- 기존의 JSP 에서는, 로직 처리를 위한 자바 코드와 뷰를 위한 HTML 코드가 섞여있어서 유지보수가 안좋은 문제 발생
🔗 모델(2)
- 컨트롤러의 역할을 해주는 Servlet과 뷰를 위한 JSP가 분리가 됌
class ExController extends HttpServlet{}
4️⃣ MVC 패턴 단점
장점
- 클래스간 정보 공유를 최소화시키는 객체 지향 구조
- 같은 모델에서 여러 개의 뷰를 지원할 수 있음
단점
- 비효율적일 수 있음
- 뷰가 업데이트 되어야 함을 알려주면, 뷰는 모델로부터 정보를 받아서 업데이트함
- 모델이 뷰가 필요로 하는 것을 직접 전달하는 것이 더 효율적이지만, 객체 지향적이지는 않음
- 컨트롤러의 역할이 너무 커질 수 있음