MVC 패턴
효과적인 웹 어플리케이션 설계 및 프레임워크 활용을 위해서 꼭 필요한 개념
Model-View-Controller의 약어로 주로 GUI 기반의 어플ㄹ케이션 개발에 사용된 디자인 패턴
화면과 데이터 처리를 분리 해 코드간의 종속성을 줄이고, 구성요소간의 역할을 명확하게 함으로써 코드 분리가 쉽고
협업을 유리하게 할 수 있다.
Model(모델)
- 데이터를 처리하는 영역
- 실제 구현에는 데이터베이스 연동을 위한 DAO(Data Access Object) 클래스, 데이터 구조를 표현하는 DO(Data Object, Entity) 클래스로 구성
- View, Controller에 독립적인 구조
- 효과적인 구현을 위해 JPA를 사용하는 경우 DAO는 생략되거나, 구현 범위가 축소 될 수 있다.
public class Student {
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;
}
View(뷰)
- 화면을 담당하는 부분(JSP)
- 컨트롤러로부터 전달된 데이터의 출력과 HTML, CSS 등을 통해 화면 디자인 처리
- 기본적으로 Model,Controller와의 종속성이 없도록 구현
public class StudentView {
public void printStudentDetails(String studentName, String studentRollNo) {
System.out.println("Student: ");
System.out.println("Name: " + studentName);
System.out.println("Roll No: " + studentRollNo);
}
}
Controller(컨트롤러)
- MVC 패턴의 핵심. 모든 사용자 요청의 중심에 위치 --> View와 종속관계
- JSP, Servlet 모두 가능하고 스프렝프레임워크로 확장 등을 생각한다면 Servlet 기반의 구현 권장
public class StudentController {
private Student model;
private StudentView view;
public StudentController(Student 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.setRolNo(rollNo);
}
public void updateView() {
view.printStudentDetails(model.getName(), model.getRollNo());
}
}
어플리케이션 ( 컨트롤러 사용 )
public class MVCPatternDemo {
public static void main(String[] args) {
Student model = retriveStudentFromDatabase();
StudentView view = new StudentView();
StudentController controller = new StudentController(model, view);
controller.updateView();
controller.setStudentName("John");
controller.updateView();
}
private static Student retriveStudentFromDatebase() {
Student student = new Student();
student.setName("JUNYOUNG");
student.setRollNo("15");
return student;
}
}
'Backend > JAVA' 카테고리의 다른 글
[JAVA] ServerSocket (0) | 2022.05.02 |
---|---|
[JAVA] HashMap (0) | 2022.04.27 |
[JAVA] chatAt(int i) - '0' (0) | 2022.04.23 |
[JAVA] 상속(Inheritance) (0) | 2022.04.22 |
[JAVA] Singleton Pattern (0) | 2022.04.21 |