Overview
MVC는 Model, View, Controller의 약자입니다. 하나의 애플리케이션과 프로젝트를 구성할 때 해당 구성요소를 세 가지 역할로 구분하는 패턴입니다.
위와 같이 사용자가 컨트롤러를 조작할 때 컨트롤러는 Model을 통해 데이터를 가져와 해당 정보를 기반으로 시각적 표현을 담당하는 View를 제어합니다. 하나의 논리를 설명하기 위해 만든 그림이며, MVC 패턴의 구조는 다음과 같습니다.
모델
- 수정하려는 모든 데이터가 있어야 합니다.
- 뷰나 컨트롤러에 대한 정보가 없어야 합니다.
- 변경 사항이 발생하면 변경 통지 처리 방법을 구현해야 합니다.
보다
- 모델 정보를 따로 저장하지 마세요.
- 모델이나 컨트롤러 등 다른 구성요소를 알면 안 됩니다.
- 변경사항이 발생한 경우 변경통지 처리 방법을 구현해야 합니다.
제어 장치
- 모델이나 뷰에 대해 알고 있어야 합니다.
- 모델 또는 뷰의 변경 사항을 모니터링해야 합니다.
서로 분리되어 각자의 역할에 집중하고 애플리케이션을 생성하면 유지보수의 문제, 애플리케이션의 확장성, 유연성이 증가하고 중복 코딩의 문제도 사라질 것입니다. 이것이 MVC 패턴입니다.
장점
- 유연하고 확장이 용이함 - 설계자와 개발자 간의 손쉬운 협업 - 유지보수 비용을 절감합니다.
불리
- 기본 기능에 대한 클래스가 많기 때문에 복잡할 수 있습니다.
- Model과 View의 완벽한 분리가 어렵다.
Structure
Code Example
package com.example.design.pattern;
class StudentModel {
private String rollNo;
private String name;
public String getRollNo() {
return rollNo;
}
public void setRollNo(String rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class StudentView {
public void printStudentDetails(String studentName, String studentRollNo) {
System.out.println("Student: ");
System.out.println("Name: " + studentName);
System.out.println("Roll No: " + studentRollNo);
}
}
class StudentController {
private StudentModel model;
private StudentView view;
public StudentController(StudentModel model, StudentView view) {
this.model = model;
this.view = view;
}
public void setStudentName(String name) {
model.setName(name);
}
public String getStudentName() {
return model.getName();
}
public void setStudentRollNo(String rollNo) {
model.setRollNo(rollNo);
}
public String getStudentRollNo() {
return model.getRollNo();
}
public void updateView() {
view.printStudentDetails(model.getName(), model.getRollNo());
}
}
public class MyMVC {
public static void main(String[] args) {
StudentModel model = retriveStudentFromDatabase();
StudentView view = new StudentView();
StudentController controller = new StudentController(model, view);
controller.updateView();
controller.setStudentName("John");
controller.updateView();
}
private static StudentModel retriveStudentFromDatabase() {
StudentModel student = new StudentModel();
student.setName("Robert");
student.setRollNo("10");
return student;
}
}
Console Result
Student:
Name: Robert
Roll No: 10
Student:
Name: John
Roll No: 10
Conclusion
N/A
'Java Design Pattern' 카테고리의 다른 글
[ENG][디자인패턴]Strategy 패턴 이론과 설명 (0) | 2022.06.03 |
---|---|
[ENG][디자인패턴]State 패턴 이론과 설명 (0) | 2022.06.02 |
[ENG][디자인패턴]Singleton 패턴 이론과 설명 (0) | 2022.06.01 |
[ENG][디자인패턴]Observer 패턴 이론과 설명 (0) | 2022.05.31 |
[ENG][디자인패턴]Mediator 패턴 이론과 설명 (0) | 2022.05.27 |
[ENG][디자인패턴]Iterator 패턴 이론과 설명 (0) | 2022.05.26 |
[ENG][디자인패턴]Factory Method 패턴 이론과 설명 (0) | 2022.05.26 |
[ENG][디자인패턴]Decorator 패턴 이론과 설명 (0) | 2022.05.25 |