Overview

MVC는 Model, View, Controller의 약자입니다. 하나의 애플리케이션과 프로젝트를 구성할 때 해당 구성요소를 세 가지 역할로 구분하는 패턴입니다.

위와 같이 사용자가 컨트롤러를 조작할 때 컨트롤러는 Model을 통해 데이터를 가져와 해당 정보를 기반으로 시각적 표현을 담당하는 View를 제어합니다. 하나의 논리를 설명하기 위해 만든 그림이며, MVC 패턴의 구조는 다음과 같습니다.

모델
  - 수정하려는 모든 데이터가 있어야 합니다.
  - 뷰나 컨트롤러에 대한 정보가 없어야 합니다.
  - 변경 사항이 발생하면 변경 통지 처리 방법을 구현해야 합니다.

보다
  - 모델 정보를 따로 저장하지 마세요.
  - 모델이나 컨트롤러 등 다른 구성요소를 알면 안 됩니다.
  - 변경사항이 발생한 경우 변경통지 처리 방법을 구현해야 합니다.

제어 장치
  - 모델이나 뷰에 대해 알고 있어야 합니다.
  - 모델 또는 뷰의 변경 사항을 모니터링해야 합니다.

서로 분리되어 각자의 역할에 집중하고 애플리케이션을 생성하면 유지보수의 문제, 애플리케이션의 확장성, 유연성이 증가하고 중복 코딩의 문제도 사라질 것입니다. 이것이 MVC 패턴입니다.

장점
  - 유연하고 확장이 용이함 - 설계자와 개발자 간의 손쉬운 협업 - 유지보수 비용을 절감합니다.

불리
  - 기본 기능에 대한 클래스가 많기 때문에 복잡할 수 있습니다.
  - Model과 View의 완벽한 분리가 어렵다.

 

Structure

https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC

 

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

 

728x90

+ Recent posts