JAVA를 잡아라!...

JAVA_MVC_#1_계산기 본문

JAVA/JAVA_복습문제

JAVA_MVC_#1_계산기

onivv 2023. 12. 11. 22:03

[ 계산기 프로그램 ]

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