MVC 패턴이란 소프트웨어 설계 패턴으로, 애플리케이션을 Model, View, Controller의 세 가지 주요 구성 요소로 나누어 각각의 역할을 분리하는 구조이다.
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)
댓글