Java Design Pattern - Model-View-Controller(MVC) Pattern

업데이트:

Design Pattern

  • 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
  • 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론일 뿐이며 모든 상황의 해결책이 아니다.

Model-View-Controller(MVC) Pattern

  • 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 기 위해 사용한다.

Example

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;
  }

}
  • 데이터의 구조인 Student 클래스를 정의한다.
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);
  }

}
  • 데이터의 시각화 역할을 수행할 StudentView 클래스를 정의한다.
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());
  }

}
  • View와 Model을 이어줄 수 있는 StudentController 클래스를 정의한다.
public class MVCPatternMain {

  public static void main(String[] args) {
    // Fetch student record based on his roll no from the database.
    Student model = retriveStudentFromDatabase();

    // Create a view : to write student details on console.
    StudentView view = new StudentView();

    StudentController controller = new StudentController(model, view);
    controller.updateView();

    // Update model data.
    controller.setStudentName("John");
    controller.updateView();
  }

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

}
  • Controller 객체에 View와 Model 객체를 주입하여 기능을 수행해본다.

Source

Sample Code는 여기에서 확인 가능합니다.

댓글남기기