[JAVA/디자인패턴] MVC Pattern, MVC 패턴

2023. 12. 11. 16:27
반응형

MVC Pattern

https://en.m.wikipedia.org/wiki/File:MVC-basic.svg

 

 

비즈니스 로직 및 데이터와 보이는 부분을 분리하는 디자인 패턴.

사용자 인터페이스 로직이 비즈니스 로직보다 더 자주 바뀐다면 MVC를 사용하는 것이 바람직하다.

화면을 포함하는 사용자 인터페이스와 업무 처리 부분을 분리해서 동작할 수 있도록 한다.

MVC는 원래 Smalltalk 언어에서부터 시작되었으나 현재 GUI를 지원하는 프로그램과 웹 프레임워크에서 많이 사용됨

 

 

모델(Model) : Application의 데이터를 관리하는 부분 또는 로직

뷰(View) : 데이터가 화면에 보이는 부분을 관리

컨트롤러(Controller) : 사용자의 입력을 처리하고, Model과 View 사이에서 상호작용 할 수 있도록 지원

 


MVC와 웹

 

모델(Model)

  • 데이터와 비즈니스 로직을 관리하는 부분. 데이터베이스와 상호작용하여 데이터를 읽거나 쓰는 역할. 비즈니스 로직은 사용자가 원하는 기능을 수행하기 위한 규칙이나 알고리즘을 정의한다.

뷰(View)

  • 사용자에게 보이는 부분을 담당한다. HTML, CSS, JavaScript 등을 사용하여 사용자 인터페이스를 구성하고, 사용자에게 정보를 표시하거나 입력을 받는다. 뷰는 모델의 데이터를 표시하고 사용자의 이벤트를 감지하여 컨트롤러에 전달한다.

컨트롤러(Controller)

  • 사용자의 입력을 처리하고, 그에 따라 모델을 업데이트하거나 뷰를 갱신한다. 사용자가 웹 페이지에서 어떤 동작을 취하면 이를 감지하고, 그에 따라 모델의 데이터를 변경하거나 뷰를 업데이트한다. 또한, 비즈니스 로직을 호출하여 특정 기능을 수행한다.

 

 

 


MVC 예제

 

 

https://www.tutorialspoint.com/design_pattern/mvc_pattern.htm

 

 

 

Model

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

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

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.setRollNo(rollNo);
    }
    public String getStudentRollNo() {
        return model.getRollNo();
    }
    public void updateView() {
        view.printStudentDetails(model.getName(), model.getRollNo());
    }
}

 

 

public class Main {
    private static Student retriveStudentFromDatabase() {
        Student student = new Student();
        student.setName("Robert");
        student.setRollNo("10");
        return student;
    }

    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();
    }
}
반응형

BELATED ARTICLES

more