Nuke Olaf - Log Store

MVC 디자인 패턴 본문

ComputerScience/[디자인 패턴]

MVC 디자인 패턴

NukeOlaf 2020. 3. 2. 20:14

1. MVC 의 사전적 의미

Model :
1. a standard or example of imitaion or comparison.
2. a representation, generally in miniature, to show the construction or appearance of something.

View : 
an instance of seeing or beholding; visual inspection

Controller : 관리자, 조종 장치

 

2. IT 사전에서 말하는 MVC 란?

응용 프로그램을 "모델-뷰-컨트롤러" 세 가지의 구성요소로 나누어 (이를 어렵게 말하면 사용자 인터페이스로부터 비즈니스 로직을 분리하는 것) 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만드는 방식.

mozilla : https://developer.mozilla.org/ko/docs/Glossary/MVC

wiki : https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다.

소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있다. 이러한 "관심사 분리" 는 더나은 업무의 분리와 향상된 관리를 제공한다. MVC 에 기반을 둔 몇 가지 다른 디자인 패턴으로 MVVM (모델-뷰-뷰모델), MVP (모델-뷰-프리젠터), MVW (모델-뷰-왓에버) 가 있다.

MVC 소프트웨어 디자인 패턴의 세 가지 부분은 다음과 같이 설명할 수 있다.

  1. 모델: 데이터와 비즈니스 로직을 관리
  2. 뷰: 레이아웃과 화면을 처리
  3. 컨트롤러: 명령을 모델과 뷰 부분으로 라우팅

 

3. MVC 디자인 패턴을 사용하는 이유

사용자가 보는 페이지, 데이터처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤, 이 3가지로 구성되는 하나의 애플리케이션을 만들면 각각 맡은바에만 집중을 할 수 있게 된다. 공장에서도 하나의 역할들만 담당을 해서 처리를 해서 효율적이게 됩니다. 여기서도 마찬가지다.

서로 분리되어 각자의 역할에 집중할 수 있게끔하여 개발을 하고 그렇게 애플리케이션을 만든다면, 유지보수성, 애플리케이션의 확장성, 그리고 유연성이 증가하고, 중복코딩이라는 문제점 또한 사라지게 된다.

*유연성: 여기서 유연성이라는 것은 클라이언트의 새로운 요구사항에 대해 최소한의 비용으로 보다 유연하게 대처할 수 있는 것
*비즈니스로직: 프로그램의 논리구조

 

정보가 사용자에게 보여지는 부분과, 정보의 내부 표현을 분리하기 위해 수행된다.

정적 페이지가 아닌 동적 페이지에서는 페이지 내부의 데이터가 계속 달라진다. 이렇게 달라지는 데이터들을 처리하는 코드와, 최종적으로 데이터를 보여주는 코드를 분리하기 위해 만들어진 디자인 패턴이다. 데이터를 처리하는 코드와 데이터를 보여주는 코드가 모두 혼재되어 있으면, 나중에 유지보수하기가 어렵기 때문이다.

 

4. MVC 디자인 패턴의 간단한 예시

간단한 쇼핑 리스트 앱 : 사야할 항목의 이름, 개수, 가격 목록이 주어진다.

- 모델 (Model)

모델은 앱이 포함해야할 데이터가 무엇인지를 정의합니다. 데이터의 상태가 변경되면 모델을 일반적으로 뷰에게 알리며(따라서 필요한대로 화면을 변경할 수 있습니다) 가끔 컨트롤러에게 알리기도 합니다(업데이트된 뷰를 제거하기 위해 다른 로직이 필요한 경우).

다시 쇼핑 리스트 앱으로 돌아가서, 모델은 리스트 항목이 포함해야 하는 데이터 — 품목, 가격, 등. — 와 이미 존재하는 리스트 항목이 무엇인지를 지정합니다.

- 뷰 (View)

뷰는 앱의 데이터를 보여주는 방식을 정의합니다.

쇼핑 리스트 앱에서, 뷰는 항목이 사용자게에 보여지는 방식을 정의하며, 표시할 데이터를 모델로부터 받습니다.

- 컨트롤러 (Controller)

컨트롤러는 앱의 사용자로부터의 입력에 대한 응답으로 모델 및/또는 뷰를 업데이트하는 로직을 포함합니다.

예를 들어보면, 쇼핑 리스트는 항목을 추가하거나 제거할 수 있게 해주는 입력 폼과 버튼을 갖습니다. 이러한 액션들은 모델이 업데이트되는 것이므로 입력이 컨트롤러에게 전송되고, 모델을 적당하게 처리한다음, 업데이트된 데이터를 뷰로 전송합니다.

단순히 데이터를 다른 형태로 나타내기 위해 뷰를 업데이트하고 싶을 수도 있습니다(예를 들면, 항목을 알파벳순서로 정렬한다거나, 가격이 낮은 순서 또는 높은 순서로 정렬). 이런 경우에 컨트롤러는 모델을 업데이트할 필요 없이 바로 처리할 수 있습니다.

 

5. MVC 패턴을 사용하는 방법

학생의 객체를 생성하고, 학생의 이름을 입력하고 출력하는 예제를 통해 MVC 패턴을 사용하는 방법을 알아본다.

(1) Model

규칙1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
규칙2. 뷰나 컨트롤러에 대해 어떤 정보도 알지 말아야 한다.
규칙3. 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야 한다.

Student.java

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

 

(2) View

규칙1. 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
규칙2. 모델이나 컨트롤러와 같이 다른 구성 요소들을 몰라야 한다.
규칙3. 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야 한다.

StudentView.java

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

 

(3) Controller

규칙1. 모델이나 뷰에 대해 알고 있어야 한다.
규칙2. 모델이나 뷰의 변경을 모니터링해야 한다.

StudentController.java

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

 

(4) MVC 패턴의 사용

public class MVCPatternDemo {
   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;
   }
}

 

(5) 출력 결과

Student: 
Name: Robert
Roll No: 10
Student: 
Name: John
Roll No: 10

 

 

6. MVC 패턴의 장단점

Advantages of MVC: Key Benefits

Here, are major benefits of using MVC architecture.

  • Easy code maintenance easy to extend and grow
  • MVC Model component can be tested separately from the user
  • Easier support for new type of clients
  • Development of the various components can be performed parallelly.
  • It helps you to avoid complexity by dividing an application into the three units. Model, view, and controller
  • It only uses a Front Controller pattern which process web application requests through a single controller.
  • Offers the best support for test-driven development
  • It works well for Web apps which are supported by large teams of web designers and developers.
  • Provides clean separation of concerns(SoC).
  • Search Engine Optimization (SEO) Friendly.
  • All classed and objects are independent of each other so that you can test them separately.
  • MVC allows logical grouping of related actions on a controller together.

Disadvantages of using MVC

  • Difficult to read, change, to unit test, and reuse this model
  • The framework navigation can some time complex as it introduces new layers of abstraction which requires users to adapt to the decomposition criteria of MVC.
  • No formal validation support
  • Increased complexity and Inefficiency of data
  • The difficulty of using MVC with the modern user interface
  • There is a need for multiple programmers to conduct parallel programming.
  • Knowledge of multiple technologies is required.
  • Maintenance of lots of codes in Controller

 

7. MVC 에 대한 재밌는 글

https://softwareengineering.stackexchange.com/questions/127624/what-is-mvc-really

 

참고 사이트 >>>

https://m.blog.naver.com/jhc9639/220967034588

https://medium.com/@jang.wangsu/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-1d74fac6e256

https://opentutorials.org/course/697/3828

https://www.guru99.com/mvc-tutorial.html

https://techterms.com/definition/mvc

https://www.tutorialspoint.com/mvc_framework/mvc_framework_introduction.htm

https://www.youtube.com/watch?v=AERY1ZGoYc8&t=232s

Comments