노승현
MVC 란? 본문
Spring 프레임워크
“개발 패턴 : MVC”
팀플 할 때,코드가 Test.java 파일 1개
1) 다른 사람이 코드 작성중일 때
실행불가능
2) 다른 사람과의 동시간 버전관리가 불편함
프로그램 코딩을 M V C 로 분할
Model
데이터 관련된 작업을 처리하는 부분
“나는 항상 정확한 값을 받았다.”
CRUD를 구현할거야
View
사용자와 관련된 작업을 처리하는 부분
“세상에 정상적인 사용자는 없다.”
사용자의 모든 입력값에 대해서 검사 == 유효성 검사 사용자에게 친절한 프로그램이 될 수 있도록 고민하는 역할
==사용자 편의성 == UI / UX
Controller
M - V 를 이어주는 역할
M 과 V 는 절대로 직접 결합 되어서는 안된다.
Controller 를 통해서만 결합되어야 한다.
하나의 프로그램에서
Model, View, Controller 객체를 각각 1개씩만 사용함
(싱글톤 패턴 유지 가능)
유저 입력 정보는 view에서 가져오고
데이터 정보는 model에서 가져와야된다.
예제) 더하기 빼기 곱셉이 있는 계산기 프로그램
Model
package model;
// 사용자와는 전혀 상호작용을 하지않기 때문에,
// syso() 가 단 한개도 없는게 특징
public class CalcModel {
public int func01(int num1,int num2) {
return num1+num2;
}
public int func02(int num1,int num2) {
return num1-num2;
}
public int func03(int num1,int num2) {
return num1*num2;
}
}
View
package view;
import java.util.ArrayList;
import java.util.Scanner;
public class CalcView {
private Scanner sc;
ArrayList<String> datas = new ArrayList<String>();
public CalcView() {
this.sc = new Scanner(System.in);
datas=new ArrayList<String>();
datas.add("+");
datas.add("-");
datas.add("x");
datas.add("X");
datas.add("*");
}
// 사용자와의 input,output 만 고려하는 파트
// 사용자가 제공 받아야하는 문구를 제작
public void printInputInteger(int num) {
System.out.println("정수 " + num + " 입력 >>");
}
public void printInputOp() {
System.out.println("연산자 입력 >>");
}
public void printResult(int num1, String op, int num2, int result) {
System.out.println("결과는 " + num1 + " " + op + " " + num2 + " = " + result + "입니다 ");
}
// 사용자의 입력을 받아야하는 부분을 제작
public int inputInteger() {
Scanner sc = new Scanner(System.in);
int num;
while (true) {
try {
num = sc.nextInt();
break;
} catch (Exception e) {
sc.nextLine();
System.out.println("[로그] 정수만 입력 가능합니다 ");
}
}
return num;
}
public String intputStringOp() {
String op;
while (true) {
op = sc.next();
if (datas.contains(op)) {
break;
}
System.out.println("[로그 ] 없는 연산자이거나 아직 개발되지 않은 연산자입니다...");
}
return op;
}
}
Controller
package controller;
import model.CalcModel;
import view.CalcView;
// Ctrl 는 절대로 자신 스스로 기능 구현 하지 않는다.
// M, V 를 호출하여 사용
public class CalcCtrl {
private CalcModel model;
private CalcView view;
public CalcCtrl() {
this.model = new CalcModel();
this.view = new CalcView();
}
public void startApp() {
view.printInputInteger(1);
int num1 = view.inputInteger();
view.printInputOp();
String op=view.intputStringOp();
view.printInputInteger(2);
int num2 = view.inputInteger();
int result;
if(op.equals("+")) {
result = model.func01(num1, num2);
}
else if(op.equals("-")) {
result = model.func02(num1, num2);
}
else {
result = model.func03(num1, num2);}
view.printResult(num1, op, num2, result);
}
}
Main
import controller.CalcCtrl;
import controller.StudentCtrl;
public class Client {
public static void main(String[] args) {
// 계산기 프로그램
// LP, UF, ERD
// 기능 : 더하기, 뺴기, 곱하기
// UF : 정수 입력 >> 10
// 연산자 입력 >> + String
// 정수 입력 >> 5
// 결과는 10 + 5 = 15 입니다.
CalcCtrl app = new CalcCtrl(); // 설치
while (true) {
app.startApp(); // 실행
}
}
}