본문 바로가기
Spring

MVC 패턴과 그 규칙

by suyeoneee 2024. 12. 5.

MVC 패턴이란 소프트웨어 설계 패턴으로, 애플리케이션을 Model, View, Controller의 세 가지 주요 구성 요소로 나누어 각각의 역할을 분리하는 구조이다.

https://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Router-MVC-DB.svg/300px-Router-MVC-DB.svg.png

 

 

Model

- 애플리케이션의 정보, 데이터
- 데이터의 상태를 관리하고, 뷰와 컨트롤러에서 사용하는 데이터를 제공한다.

// Model: 데이터와 비즈니스 로직 처리
public class CalculatorModel {
    private int result; // 계산 결과를 저장

    // 두 숫자의 덧셈을 수행
    public void add(int num1, int num2) {
        result = num1 + num2;
    }

    // 두 숫자의 뺄셈을 수행
    public void subtract(int num1, int num2) {
        result = num1 - num2;
    }

    // 계산 결과를 반환
    public int getResult() {
        return result;
    }
}

View 

- 사용자 인터페이스 요소
- 모델에서 제공받은 데이터를 표시한다.
- 사용자 입력(이벤트)을 컨트롤러에 전달한다.

- (*뷰는 모델의 데이터를 직접 수정하지 않는다.)

import java.util.Scanner;

// View: 사용자와 상호작용 (입력 및 출력 처리)
public class CalculatorView {
    private Scanner scanner = new Scanner(System.in); // 사용자 입력을 처리하는 Scanner 객체

    // 사용자로부터 숫자를 입력받음
    public int getInput(String prompt) {
        System.out.print(prompt); // 메시지를 출력
        return scanner.nextInt(); // 사용자 입력을 정수로 반환
    }

    // 결과를 화면에 출력
    public void displayResult(int result) {
        System.out.println("Result: " + result); // 결과 출력
    }

    // 연산자를 입력받음
    public String getOperation() {
        System.out.print("Enter operation (+ or -): "); // 연산자를 요청
        return scanner.next(); // 사용자 입력 반환
    }
}

Controller 

- 모델과 뷰 사이의 상호작용을 담당
- 사용자의 입력(이벤트)을 처리하고, 이를 모델과 뷰로 전달한다.
- 모델의 데이터를 변경한다.

// Controller: 사용자 입력을 처리하고 Model과 View를 연결
public class CalculatorController {
    private CalculatorModel model; // 계산 로직을 담당하는 Model
    private CalculatorView view;  // 사용자 인터페이스를 담당하는 View

    // Controller 생성자 (Model과 View를 연결)
    public CalculatorController(CalculatorModel model, CalculatorView view) {
        this.model = model;
        this.view = view;
    }

    // 사용자 입력을 처리하고 계산 결과를 View에 전달
    public void processUserInput() {
        // 사용자로부터 두 숫자를 입력받음
        int num1 = view.getInput("Enter first number: ");
        int num2 = view.getInput("Enter second number: ");

        // 사용자로부터 연산자를 입력받음
        String operation = view.getOperation();

        // 연산자에 따라 Model에서 계산 수행
        if (operation.equals("+")) {
            model.add(num1, num2); // 덧셈 수행
        } else if (operation.equals("-")) {
            model.subtract(num1, num2); // 뺄셈 수행
        } else {
            System.out.println("Invalid operation!"); // 잘못된 연산자 처리
            return;
        }

        // 계산 결과를 View에 전달하여 출력
        view.displayResult(model.getResult());
    }
}

 

MVC 패턴을 사용하면 각 구성 요소의 역할을 분리함으로써 유지보수와 테스트가 용이해진다. 그리고 뷰(UI)를 변경해도 모델과 컨트롤러에 영향을 미치지 않기 때문에 유연성이 증가한다. 또한, 요구사항이 추가되거나 변경되더라도 기존 코드를 최소한으로 수정하여 확장할 수 있다. 

* Keyword ) 역할 분리, 유지보수성 , 확장성, 유연성

MVC 패턴 규칙

Model

 

  • 컨트롤러와 뷰에 의존하지 않아야 한다.
    Model은 독립적으로 동작하며, 데이터와 비즈니스 로직만을 처리해야 한다.
    (컨트롤러 및 뷰 관련 코드 X)

View

  • 모델에만 의존해야 하며, 컨트롤러에는 의존하지 않아야 한다.
    View는 사용자에게 데이터를 표시하는 역할만 하며, 모델로부터 필요한 데이터를 가져옵니다.
    (컨트롤러 관련 코드 X)
  • 사용자마다 다르게 보여주어야 하는 데이터만 모델로부터 받아야 한다.
    공통된 UI 구성 요소는 View 내부에 정의하고, 사용자별로 동적인 데이터는 모델에서 가져온다.
  • 뷰가 모델로부터 데이터를 받을 때, 반드시 컨트롤러를 통해야 한다.
    View는 직접 Model을 호출하지 않고, Controller를 통해 필요한 데이터를 요청해야 한다.

Controller

  • 모델과 뷰에 의존할 수 있다.
    Controller는 모델과 뷰를 연결하는 중재자 역할을 하며, 둘과 자유롭게 상호작용할 수 있다.
    (모델 및 뷰 관련 코드 O)

댓글