JAVA를 잡아라!...
JAVA_MVC_#1_계산기 본문
[ 계산기 프로그램 ]
LP, UF, 데이터(ERD) 고민부터 하기!
LP(CRUD)
더하기, 빼기, 곱하기
UF
정수를 입력학세요 >> 10
연산자 입력 >>
정수 입력 >> 5
결과는 10 + 5 = 15 입니다.
데이터(ERD)
어떤 데이터 쓰지? String 연산자..
model > CalcModel.java
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 > CalcView.java
package view;
import java.util.ArrayList;
import java.util.Scanner;
/*
사용자 입장 생각하는 view
사용자와의 input, output만을 고려하는 파트
사용자가 제공받아야하는 문구를 제작
*/
/*
- view외에서 Scanner를 사용할일이 없어 gettersetter안만듬
- 하나의 프로그램에서 Model, View, Controller 객체를 각각 1개씩만 사용하기 때문에
Scanner가 static일 필요 없음! --> 싱글톤 유지!
private
해당 클래스에서만 사용 가능
해당 클래스에서 모든 메소드에서 사용 가능
public
모든 클래스에서 사용 가능
*/
public class CalcView {
private Scanner sc;
private ArrayList<String> datas; //inputStringOp()안에 작성하면 실행할때마다 new되서 위로 뺌
public CalcView() {
sc = new Scanner(System.in);
datas = new ArrayList<String>();
datas.add("+");
datas.add("-");
datas.add("x");
datas.add("X");
datas.add("*");
}
// 안내 문구 제작
public void printInputInteger(int num) { //접근제어자 public붙이기
System.out.println("정수 " + num + " 입력 >> "); //몇번째인지 외부에서 받아주기..언젠가 많이 입력할 수 있음 몇개 입력할지 모르니
}
public void printInputOperator() {
System.out.println("연산자 입력 >> ");
}
public void printResult(int num1, String op, int num2, int result) {
System.out.println("결과는 " + num1 + op + num2 + " = " + result + " 입니다.");
}
// 사용자의 입력을 받아야하는 부분을 제작
// 사용자 입력값은 다시 받아와야하기때문에 output있음
public int intputInteger() {
int num; //scope맞춰주기
while(true) { //사용자가 얼마나 이쁘게 정수를 입력할지 몰라서 while
try {
num = sc.nextInt(); //정상입력되면 종료되~
//break; 여기 둬도됨
}
catch(Exception e) {
sc.nextLine(); // 잘못입력했을때 버퍼 비워줘
System.out.println("[로그] 정수만 입력가능합니다!");
continue;
}
break; //catch문을 들어가지않고 모두 잘 수행했다면
}
return num;
}
public String inputStringOp() {
String op;
while(true) { //사용자가 얼마나 이쁘게 연산자를 입력할지 몰라서 while
op = sc.next();
if(datas.contains(op)) {
break;
}
System.out.println("[로그] 없는 연산자이거나 아직 개발되지 않은 연산자입니다...");
}
return op;
}
}
controller > CalcCtrl
package controller;
import model.CalcModel;
import view.CalcView;
/*
어플의 핵심! 프로그램의 핵심!
Ctrl는 절대로 자신 스스로 기능을 구현 xxx
지금까지 만들어놨던 model과 view를 조합해서 사용
*/
public class CalcCtrl {
//멤버로 모델과 뷰를 데려와서
private CalcModel model;
private CalcView view;
// private 만들었으니까 초기화 하기위해 생성자 작성
public CalcCtrl() {
this.model = new CalcModel();
this.view = new CalcView();
}
public void startApp() {
view.printInputInteger(1);
int num1 = view.intputInteger();
view.printInputOperator();
String op = view.inputStringOp();
view.printInputInteger(2);
int num2 = view.intputInteger();
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);
}
}
client - Test.java
package client;
import controller.CalcCtrl;
public class Test {
public static void main(String[] args) {
CalcCtrl app = new CalcCtrl(); // 어플설치
while(true) {
app.startApp(); //어플실행
}
}
}
'JAVA > JAVA_복습문제' 카테고리의 다른 글
JAVA_MVC_#2_학생부.ver2 (0) | 2023.12.12 |
---|---|
JAVA_MVC_#2_학생부.ver1 (1) | 2023.12.11 |
JAVA_예외처리(Exception)_#2 (0) | 2023.12.08 |
JAVA_예외처리(Exception)_#1 (0) | 2023.12.08 |
JAVA_배열리스트_#1_Student (0) | 2023.12.07 |