JAVA

#13 [Java] ์‚ฌ์น™์—ฐ์‚ฐ ๊ณ„์‚ฐ๊ธฐ

dP fla 2022. 10. 27. 14:49

๐Ÿ“Œ ์‚ฌ์น™์—ฐ์‚ฐ ๊ณ„์‚ฐ๊ธฐ ์„ค๊ณ„

 

๐Ÿ“Œ ์‚ฌ์น™์—ฐ์‚ฐ ๊ณ„์‚ฐ๊ธฐ ๊ตฌํ˜„

๐Ÿ’ป Loader.java

package loader;


import front.Front;

public class Loader {

	public static void main(String[] args) {
		System.out.println("Loading...\n"); 
		Front front = new Front(1); // ์ธ์ž 1๊ณผ ํ•จ๊ป˜ frontend ์ƒ์„ฑ์ž ํ˜ธ์ถœ 
		System.out.println("Closing...");
	}
}

๐Ÿ’ป Front.java

package front;

import java.util.Scanner;

import back.Back;

public class Front {

	public Front (int recordIdx) {
		this.controller(recordIdx);
	}

	private void controller(int recordIndex) { // controller ๋ฉ”์„œ๋“œ
		Scanner scanner = new Scanner(System.in); // ์Šค์บ๋„ˆ ๊ฐ์ฒด ์ƒ์„ฑ
		String title = this.makeTitle(); // String title ๊ฐ์ฒด์— makeTitle์˜ return ๊ฐ’ (***** JS Framework Calculator v1.0
											// ***** ... ) ์ €์žฅ
		String[][] menu = { { "EXIT", "ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.~" }, { "๋ฉ”์ธ", "์—ฐ์‚ฐํ•˜๊ธฐ", "๋๋‚ด๊ธฐ" },
				{ "์—ฐ์‚ฐ", "์ƒˆ๋กœ์šด ์—ฐ์‚ฐ", "์ด์–ด์„œ ์—ฐ์‚ฐ", "์ด์ „ํ™”๋ฉด" } }; // String menu 2์ฐจ์› ๋ฐฐ์—ด ๊ฐ์ฒด ์ƒ์„ฑ
		String userData = new String(); // ์ž…๋ ฅ๋ฐ›์•„์„œ ์ €์žฅํ•  String ๊ฐ์ฒด ์ƒ์„ฑ
		String message = new String(); // ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ ์˜ค๋ฅ˜๋ฉ”์„ธ์ง€๋ฅผ ์ €์žฅํ•  message ๊ฐ์ฒด ์ƒ์„ฑ
		int selectMenu; // String์ธ userData๋ฅผ intํ˜•์œผ๋กœ ๋ฐ”๊พผ selectMenu
		boolean loopCheck = true; // loopCheck์˜ ์ดˆ๊ธฐ๊ฐ’์€ true

		while (true) {// ๋ฐ˜๋ณต๋ฌธ ์‹œ์ž‘
			this.display(title); // (***** JS Framework Calculator v1.0 ***** ... )์ถœ๋ ฅ
			if (message != null) // (์˜ค๋ฅ˜)๋ฉ”์„ธ์ง€๊ฐ€ null๊ฐ’์ด ์•„๋‹ˆ๋ผ๋ฉด
				this.display(message); // (์˜ค๋ฅ˜)๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ
			this.display(this.makeSubMenu(menu[recordIndex])); 
			/* recordIndex์— ํ•ด๋‹นํ•˜๋Š” ๋ฐฐ์—ด menu ์š”์†Œ (1์ฐจ์› ๋ฐฐ์—ด)์„ makeSubMenu์— ์ธ์ž๋กœ ๋„ฃ์–ด์„œ ์ถœ๋ ฅ 
			 * ( [ ๋ฉ”์ธ ]______________________________________ 
			 * 				1. ์—ฐ์‚ฐํ•˜๊ธฐ 0. ๋๋‚ด๊ธฐ ...)
			*/
			if (!loopCheck) // loopCheck๊ฐ€ false๋ฉด break; else ์—†์Œ
				break; // ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ loopCheck๊ฐ€ false๋ฉด break...

			userData = this.userInput(scanner);// userData๋ฅผ scanner๋กœ ์ž…๋ ฅ๋ฐ›์Œ

			if (this.isInteger(userData)) { // String userData๊ฐ€ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ (boolean์œผ๋กœ ๋ฆฌํ„ด๋จ), if๊ฐ€ true๋ฉด(์ •์ˆ˜๋กœ ๋ฐ”๊ฟ€ ์ˆ˜
											// ์žˆ์œผ๋ฉด) ์‹คํ–‰
				selectMenu = this.convertToInteger(userData); // selectMenu(int)์— userData๋ฅผ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ ๊ฐ’
																// ๋Œ€์ž…(convertToInteger() => String -> int)
				if (this.isIntegerRange(selectMenu, 0, menu[recordIndex].length - 2)) { // selectMenu(int)๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’
																						// ๋‚ด์— ์žˆ๋Š”์ง€ ํ™•์ธ
					message = null; // ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋‹ค๋ฉด message๋ฅผ null๋กœ ์ดˆ๊ธฐํ™”
					recordIndex += (selectMenu == 0) ? -1 : 1; // ์‚ฌ์šฉ์ž๊ฐ€ 0์„ ์„ ํƒํ•œ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด recordIndex ๊ฐ’์— +1์„ ํ•˜๊ณ  0์„ ์„ ํƒํ–ˆ๋‹ค๋ฉด -1(์ด์ „
																// ๋ฉ”๋‰ด์œผ๋กœ ๋Œ์•„๊ฐ)
					if (recordIndex == 0) { // recordIndex๊ฐ€ 0์ด๋ผ๋ฉด ([Exit] ~~~ )
						loopCheck = false; // loopCheck = false๋กœ while๋ฌธ ๋น ์ ธ๋‚˜์˜ด
					} else if (recordIndex >= 2) { // recordIndex๊ฐ€ 2๋ณด๋‹ค ํด ๋•Œ (๋ฉ”์ธ->์—ฐ์‚ฐ)
						recordIndex = this.operator(title, menu[recordIndex], scanner);
						// operator๋ฉ”์„œ๋“œ์—์„œ returnํ•œ ๊ฐ’(1)์„ recordIndex์— ์žฌํ• ๋‹น(๋ฉ”์ธ ์ธ๋ฑ์Šค๊ฐ€ ๋จ)
					}
				} else { // selectMenu๊ฐ€ ๋ฒ”์œ„๋‚ด ์ˆซ์ž๊ฐ€ ์•„๋‹๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ
					message = "[ 0~" + (menu[recordIndex].length - 2) + " ๋ฒ”์œ„๋‚ด ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”]\n\n";
				}
			} else {// userData๊ฐ€ int๊ฐ€ ์•„๋‹๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ
				message = "[ ์ˆซ์ž๋กœ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š” ]\n\n";
			}
		}
		scanner.close();
	}

	private String makeTitle() { // ํƒ€์ดํ‹€์„ ๋งŒ๋“œ๋Š” ๋ฉ”์„œ๋“œ
		StringBuffer title = new StringBuffer(); // String ๋ฒ„ํผ์— ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€(๊ตณ์ด String Buffer ์“ธํ•„์š” ์—†์Œ)
		title.append("****************************************************\n\n");
		title.append("	    JS Framework Calculator  v1.0\n");
		title.append("		           Designed By Lee Yerim\n\n");
		title.append("****************************************************\n\n");
		return title.toString(); // ํƒ€์ดํ‹€์„ ๋งŒ๋“ค์–ด์„œ String์„ ํ˜ธ์ถœํ–ˆ๋˜ ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜ํ™˜
	}

	/*
	 * [ MAIN ]________________________________________
	 * 
	 * 1. ์—ฐ์‚ฐํ•˜๊ธฐ 0. ๋๋‚ด๊ธฐ __________________________________ select :
	 */
	private String makeSubMenu(String[] menu) { // ๋ฐฐ์—ด์„ ์ธ์ž๋กœ ๋ฐ›์•„ String์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ (์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ)
		StringBuffer subMenu = new StringBuffer();
		subMenu.append("  [ " + menu[0] + " ]");
		subMenu.append(" _____________________________________");
		for (int underBar = 0; underBar <= 4 - menu[0].length(); underBar++) {
			subMenu.append("_");
		}
		subMenu.append("\n\n");
		if (menu.length <= 2) {
			subMenu.append("    " + menu[menu.length - 1] + "  \n");
			subMenu.append("  ________________________________________________\n");
		} 
		else {
			for (int colIdx = 1; colIdx < menu.length; colIdx++) {
				if (colIdx == menu.length - 1) {
					subMenu.append("0. " + menu[colIdx] + "  \n");
				} 
				else {
					subMenu.append("    " + colIdx + ". " + menu[colIdx] + "     ");
				}
			}
			subMenu.append("  __________________________________ select : ");
		}
		return subMenu.toString(); // String ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์„œ ํ˜ธ์ถœํ–ˆ๋˜ ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜ํ™˜
	}

	/*
	 * ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ „์šฉ ๋ฉ”์„œ๋“œ ๊ณ ๋ ค์‚ฌํ•ญ : 1. ์ˆซ์ž๋กœ ๋ณ€ํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์–ด์งˆ ๊ฒฝ์šฐ ํ•ด๊ฒฐ๋ฐฉ์•ˆ 2. Scanner Class์˜
	 * Life Cycle๊ณผ Performance
	 */
	private String userInput(Scanner scanner) { // ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›๋Š” userInput ๋ฉ”์„œ๋“œ
		return scanner.next();
	}

	/* ์ •์ˆ˜ ๋ณ€ํ™˜์—ฌ๋ถ€ ์ฒดํฌ */
	private boolean isInteger(String value) { // String ๊ฐ’์„ ๋ฐ›์•„์„œ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„, boolean๊ฐ’์„ ํ˜ธ์ถœํ–ˆ๋˜ ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜ํ™˜ (true,false)
		boolean isResult = true; // isResult์˜ ์ดˆ๊ธฐ๊ฐ’์€ true
		try { // value๋ฅผ int๋กœ ๋ณ€ํ™˜ํ•ด๋ณด๊ณ 
			Integer.parseInt(value);
		} catch (Exception e) { // ์•ˆ๋˜๋ฉด true ์˜€๋˜ isResult์— false ๋Œ€์ž…
			isResult = false;// e.printStackTrace();
		}
		return isResult; // boolean ๊ฐ’์ธ isResult๋ฅผ ๋ฐ˜ํ™˜ -> ํ˜ธ์ถœํ–ˆ๋˜ ๋ฉ”์„œ๋“œ๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ
	}

	/* ๋ฌธ์ž >> ์ •์ˆ˜ ๋ณ€ํ™˜ */
	private int convertToInteger(String value) { // String ๊ฐ์ฑ„ (value)๋ฅผ ๋ฐ›์•„์„œ
		return Integer.parseInt(value); // String value๋ฅผ intํ˜•์œผ๋กœ ๋ฐ”๊พผ ๊ฐ’์„ ํ˜ธ์ถœํ–ˆ๋˜ ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜ํ™˜
	}

	/* ์ •์ˆ˜์˜ ๋ฒ”์œ„ ์ฒดํฌ */
	private boolean isIntegerRange(int value, int starting, int last) { // ์ •์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ, (๋น„๊ตํ•  ๊ฐ’, ์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’)์„ ๋ฐ›์•„์„œ ๋ฒ”์œ„๋‚ด์—
																		// ์žˆ์œผ๋ฉด boolean๊ฐ’์„ ํ˜ธ์ถœํ–ˆ๋˜ ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜ํ™˜
		return (value >= starting && value <= last) ? true : false; // ๋ฒ”์œ„๋‚ด์— ์žˆ์œผ๋ฉด true return, ๋ฒ”์œ„ ๋‚ด์— ์—†์œผ๋ฉด false return
	}

	/* ์ถœ๋ ฅ ์ „์šฉ ๋ฉ”์„œ๋“œ */
	private void display(String text) { // String๊ฐ’์„ ์ถœ๋ ฅ
		System.out.print(text);
	}

	/* ์—ฐ์‚ฐ Controller */
	private int operator(String title, String[] menu, Scanner scanner) { // title = (***** JS Framework Calculator v1.0
																			// ***** ... ),
		// menu = {"์—ฐ์‚ฐ", "์ƒˆ๋กœ์šด ์—ฐ์‚ฐ", "์ด์–ด์„œ ์—ฐ์‚ฐ", "์ด์ „ํ™”๋ฉด"} (menu[2]), scanner๊ฐ์ฒด
		Back backend = new Back(); // ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  backend ์ƒ์„ฑ์ž ํ˜ธ์ถœ
		int[] data = new int[4]; // ์—ฐ์‚ฐํ•  ๊ฐ’๊ณผ ์—ฐ์‚ฐ์ž๋ฅผ ์ €์žฅํ•  intํ˜• ๋ฐฐ์—ด data[4] ์„ ์–ธ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋จ
		String[] subTitle = { "์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” ", "์—ฐ์‚ฐ์ž๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”", "์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "์—ฐ์‚ฐ๊ฒฐ๊ณผ" }; // title๋กœ ์“ธ Stringํ˜• ๋ฐฐ์—ด ์„ ์–ธ+ํ• ๋‹น
		String temp = new String(); // ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์„ ์ž„์‹œ๋กœ ์ €์žฅํ•  temp Stringํ˜• ๋ณ€์ˆ˜ ์„ ์–ธ
		String message = new String(); // ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ String์„ ๋‹ด์„ String ๊ฐ์ฒด ์ƒ์„ฑ
		boolean loopCheck = true; // while๋ฌธ์„ ์ œ์–ดํ•  loopCheck ์„ ์–ธ ์ดˆ๊ธฐ๊ฐ’ true
		boolean isFormula = false; // ์ˆ˜์‹์„ ์ถœ๋ ฅํ• ์ง€ ๋ง์ง€ ์ œ์–ดํ•  isFormula ์„ ์–ธ, ์ดˆ๊ธฐ๊ฐ’ false
		boolean run = true; // while๋ฌธ์„ ์ œ์–ดํ•  run ์„ ์–ธ ์ดˆ๊ธฐ๊ฐ’ true
		int step = 12; // step์˜ ์ดˆ๊ธฐ๊ฐ’์€ 12

		while (run) { // ๋ฐ˜๋ณต๋ฌธ 1(run)
			while (loopCheck) { // ๋ฐ˜๋ณต๋ฌธ 2(loopCheck)
				this.display(title); // title์ถœ๋ ฅ (***** JS Framework Calculator v1.0 ***** ... )
				switch (step) {// ์ดˆ๊ธฐ๊ฐ’ : 12๋กœ ์‹œ์ž‘
				case 12:
				case 22:
				case 32:
				case 42: // step์˜ ๊ฐ’์ด 12,22,32,42์ผ ๊ฒฝ์šฐ
					this.display(makeSubTitle(subTitle[(step / 10) - 1]));
					// 12์ผ๊ฒฝ์šฐ subTitle[0]("์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” "), (12/10)-1 = 0์ด๋ผ์„œ.
					// 22์ผ ๊ฒฝ์šฐ subTitle[1]("์—ฐ์‚ฐ์ž๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”"),
					// 32์ผ ๊ฒฝ์šฐ subTitle[2]("์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”"),
					// 42์ผ ๊ฒฝ์šฐ subTitle[3]("์—ฐ์‚ฐ๊ฒฐ๊ณผ") ์ถœ๋ ฅ
					if (message != null) { // String message์— ํ• ๋‹น๋œ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด
						this.display(message + "\n"); // ์ถœ๋ ฅ
						message = null;// ์ถœ๋ ฅํ›„์— message์— ํ• ๋‹น๋œ ๊ฐ’์„ ์ดˆ๊ธฐํ™” (null)
					}
					if (isFormula) { // data[0]์— ๊ฐ’์„ ๋„ฃ์€ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ˆ˜์‹์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š์•„๋„๋จ
						// -> ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ isFormula (์ดˆ๊ธฐ๊ฐ’ false๋‹ˆ๊นŒ ์ƒˆ๋กœ ์—ฐ์‚ฐ์—์„œ ์ฒซ๋ฒˆ์งธ ์ˆซ์ž ์ž…๋ ฅ์‹œ ์ˆ˜์‹์ด ์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ)
						if (step != 42) // step์ด 42๊ฐ€ ์•„๋‹Œ๊ฒฝ์šฐ(๊ฒฐ๊ณผ๊ฐ’ ์ถœ๋ ฅํ• ๋•Œ ์ œ์™ธ) ์ˆ˜์‹ ์ถœ๋ ฅ
							this.display(" [์ˆ˜์‹] ");
						for (int dataIdx = 0; dataIdx < data.length; dataIdx++) { // ์ˆ˜์‹์„ ์ถœ๋ ฅ (4๋ฒˆ ๋ฐ˜๋ณต)
							if (data[dataIdx] != 0) {// data์•ˆ์˜ ๊ฐ’์ด ์ดˆ๊ธฐํ™”๊ฐ’(0)์ด ์•„๋‹Œ ๊ฒฝ์šฐ -> ๋ฐฐ์—ด์•ˆ์— ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ๊ฒฝ์šฐ!!
								this.display(" " + (dataIdx == 1 ? this.convertToOperator(data[dataIdx]) : data[dataIdx])); 
								// dataIdx๊ฐ€ ์—ฐ์‚ฐ์ž ์ž๋ฆฌ๋ฉด ์ˆซ์ž๋ง๊ณ  "์—ฐ์‚ฐ์ž"(String)๋กœ ๋ฐ”๊ฟ”์„œ ์ถœ๋ ฅํ•˜๊ณ , ์ˆซ์ž์ž๋ฆฌ๋ฉด ์ˆซ์ž๋ฅผ ์ถœ๋ ฅ
							} else {// data์•ˆ์˜ ๊ฐ’์ด ์ดˆ๊ธฐํ™”๊ฐ’ (0) -> ๋ฐฐ์—ด์•ˆ์— ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ์—” ๋” ๋น„๊ตํ•˜์ง€ ์•Š๊ณ  break๋กœ for๋ฌธ ํƒˆ์ถœ
								break;
							}
						}
					}
					step++; // step์˜ ๊ฐ’์„ 1์ฆ๊ฐ€, step 12->13 /step 22->23 /step 32->33 /step 42->43
				case 13:
				case 23:
				case 33:
				case 43: // step์˜ ๊ฐ’์ด 13,23,33,43์ผ ๊ฒฝ์šฐ
					isFormula = true; // isFormula๋ฅผ true๋กœ ๋ฐ”๊ฟˆ. ์ˆ˜์‹์„ ์ถœ๋ ฅํ•ด์•ผํ•˜๋‹ˆ๊นŒ.
					this.display(step == 23 ? "\n[์„ ํƒ : 1. ๋”ํ•˜๊ธฐ  2. ๋นผ๊ธฐ   3. ๊ณฑํ•˜๊ธฐ   4. ๋‚˜๋ˆ„๊ธฐ] : " : "");// step์ด 23(์—ฐ์‚ฐ์ž ์„ ํƒํ•˜๋Š” step, ์ฒซ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ๋„ฃ์€  ์ดํ›„)์ด๋ผ๋ฉด ์—ฐ์‚ฐ์ž ์„ ํƒ ๋ฉ”๋‰ด๋ฅผ ์ถœ๋ ฅ, ์•„๋‹ˆ๋ฉด ์ถœ๋ ฅ x
					if (step != 43) {// step์ด 43์ด ์•„๋‹Œ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์Œ
						temp = this.userInput(scanner); // String temp์— ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์Œ step=43์ธ ๊ฒฝ์šฐ(์—ฐ์‚ฐ ๋‹จ๊ณ„์ผ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์„ ํ•„์š”๊ฐ€
														// ์—†์Œ)
						if (this.isInteger(temp)) { // ๋งŒ์•ฝ String temp์˜ ๊ฐ’์„ int๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•˜๋ฉด ์‹คํ–‰
							data[(step / 10) - 1] = this.convertToInteger(temp); // String temp์˜ ๊ฐ’์„ int๋กœ ๋ฐ”๊ฟ”์„œ ๊ฐ ๋ฐฐ์—ด ์ž๋ฆฌ์— ์ €์žฅ
																					// (์ฒซ๋ฒˆ์งธ๊ฐ’ : data[0], ์—ฐ์‚ฐ์ž data[1],๋‘๋ฒˆ์งธ
																					// ๊ฐ’ data[2]
							if (step == 23) { // step์ด 23(์—ฐ์‚ฐ์ž ์„ ํƒํ•˜๋Š” ๋‹จ๊ณ„)์ผ ๊ฒฝ์šฐ,data[1]์˜ ๊ฐ’(์—ฐ์‚ฐ์ž ์ž๋ฆฌ)์ด 1 ~ 4(๋”ํ•˜๊ธฐ ~ ๋‚˜๋ˆ„๊ธฐ)๋ฒ”์œ„์— ๋“ค์–ด๊ฐ€๋Š”์ง€
												// ํ™•์ธ
								if (!this.isIntegerRange(data[1], 1, 4)) { // 1<=data[1]<=4๊ฐ€ ์•„๋‹๊ฒฝ์šฐ
									data[1] = 0; // ๋ฒ”์œ„ ๋‚ด์— ์žˆ์ง€ ์•Š์€ ์ˆซ์ž๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œํ›„
									message = "\n*** 1 ~ 4 ๋ฒ”์œ„๋‚ด์—์„œ ์„ ํƒํ•˜์„ธ์š” ***"; // ์˜ค๋ฅ˜๋ฉ”์„ธ์ง€๋ฅผ message์— ์ €์žฅ
									step = 22; // step 23 -> 22
									break; // switch(step) ํƒˆ์ถœ
								} // step์ด 43์ด ์•„๋‹Œ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์Œ
							}
						} else {// String temp์˜ ๊ฐ’์„ int๋กœ ๋ณ€ํ™˜ ๋ถˆ๊ฐ€ํ•˜๋ฉด ์‹คํ–‰
							message = "\n*** ์ •์ˆ˜๋กœ ์ž…๋ ฅํ•˜์„ธ์š” ***"; // String message ๊ฐ์ฒด์— ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ํ• ๋‹น
							step -= 1; // 13,23,33,43์˜€๋˜ step๊ฐ’์— -1์„ํ•ด์„œ 12,22,32,42๋กœ ๋ฐ”๊ฟˆ -> ์ „๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ ์ž…๋ ฅ์„ ๋‹ค์‹œ ๋ฐ›์Œ
							break;// switch(step) ํƒˆ์ถœ
						} // String temp์˜ ๊ฐ’์„ int๋กœ ๋ณ€ํ™˜ ๋ถˆ๊ฐ€ํ•˜๋ฉด ์‹คํ–‰
					} else {// step์ด 43์ธ๊ฒฝ์šฐ(๋ชจ๋“  ๊ฐ’์„ ์ž…๋ ฅํ–ˆ์„๋•Œ) ์—ฐ์‚ฐ ์ง„ํ–‰
						if (data[1] == 1) { // data[1]์˜ ๊ฐ’์ด 1์ด๋ฉด data[3]์ž๋ฆฌ์— (์—ฐ์‚ฐ๊ฒฐ๊ณผ์ž๋ฆฌ) ์ฒซ๋ฒˆ์งธ ์ˆซ์ž์™€ ๋‘๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ๋”ํ•ด์„œ ์ €์žฅ, backend์—์„œ
											// long์œผ๋กœ ์—ฐ์‚ฐํ•˜๋Š”๋ฐ ๋ฐฐ์—ด์€ intํ˜•์ด๋ฏ€๋กœ ํ˜•๋ณ€ํ™˜ํ•ด์คŒ
							data[3] = (int) backend.plus(data[0], data[2]);
						} else if (data[1] == 2) { // data[1]์˜ ๊ฐ’์ด 2์ด๋ฉด data[3]์ž๋ฆฌ์— (์—ฐ์‚ฐ๊ฒฐ๊ณผ์ž๋ฆฌ) ์ฒซ๋ฒˆ์งธ ์ˆซ์ž์™€ ๋‘๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ๋นผ์„œ ์ €์žฅ
							data[3] = (int) backend.minus(data[0], data[2]);
						} else if (data[1] == 3) { // ์œ„์™€ ๋™์ผ, ๊ณฑํ•ด์„œ ์ €์žฅ
							data[3] = (int) backend.product(data[0], data[2]);
						} else { // ์œ„์™€ ๋™์ผ, ๋‚˜๋ˆ ์„œ ์ €์žฅ (intํ˜•์ด๋ฏ€๋กœ ์†Œ์ˆ˜์ x)
							data[3] = (int) backend.divide(data[0], data[2]);
						}
					}
					if (step != 43) // step์ด 43์ด ์•„๋‹Œ๊ฒฝ์šฐ (์—ฐ์‚ฐ์ด ๋‚จ์•˜์„ ๊ฒฝ์šฐ) 
						step += 9;	//step์— 9๋ฅผ ๋”ํ•จ (13->22, 23->32, 33->42)
					else
						loopCheck = false; //step์ด 43์ผ ๊ฒฝ์šฐ(์—ฐ์‚ฐ์ด ๋‹ค๋๋‚˜๋ฉด) loopCheck๋ฅผ false๋กœ ๋ฐ”๊ฟˆ -> ๋ฐ˜๋ณต๋ฌธ 2(loopCheck) ํƒˆ์ถœ
				}

			} // ๋ฐ˜๋ณต๋ฌธ 2(loopCheck)
			this.display(" = " + data[3]); // ๋“ฑํ˜ธ์™€ ์—ฐ์‚ฐ๊ฒฐ๊ณผ ์ถœ๋ ฅ
			this.display("\n\n"); // ์ค„๋ฐ”๊ฟˆ
			boolean subMenu = true; 
			while (subMenu) { //๋ฐ˜๋ณต๋ฌธ 3(subMenu) ์‹œ์ž‘ (์—ฐ์‚ฐ์ด ๋‹ค๋๋‚œํ›„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ)
				this.display(this.makeSubMenu(menu)); //1.์ƒˆ๋กœ์—ฐ์‚ฐ 2.์ด์–ด์—ฐ์‚ฐ 0.๋๋‚ด๊ธฐ ์ถœ๋ ฅ
				if (this.isInteger(temp = this.userInput(scanner))) { // ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ๋ฉ”๋‰ด๊ฐ’(String)์„ temp์— ์ €์žฅํ›„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ(boolean), ์ •์ˆ˜๊ฐ’์ด๋ฉด ์‹คํ–‰
					int selectNumber = this.convertToInteger(temp); // ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ๋ฉ”๋‰ด๊ฐ’(String) temp๋ฅผ int๋กœ ๋ณ€ํ™˜ํ•ด selectMenu์— ์ €์žฅ
					if (this.isIntegerRange(selectNumber, 0, menu.length - 2)) { //selectmenu๊ฐ€ 0๋ถ€ํ„ฐ2์˜ ๊ฐ’์ธ์ง€ ํ™•์ธ (1.์ƒˆ๋กœ์—ฐ์‚ฐ 2.์ด์–ด์—ฐ์‚ฐ 0.๋๋‚ด๊ธฐ)
						subMenu = false;//๋ฐ˜๋ณต๋ฌธ 3(subMenu) false
						if (selectNumber == 1) { //selectMenu ๊ฐ€ 1์ด๋ฉด (์ƒˆ๋กœ์—ฐ์‚ฐ์ด๋ฉด)
							for (int dataIdx = 0; dataIdx < data.length; dataIdx++) {
								data[dataIdx] = 0; //๋ฐฐ์—ด์— ์žˆ๋˜ ๊ฐ’์„ ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
							}
							isFormula = false; //์ˆ˜์‹ ์ถœ๋ ฅ์„ ์ œ์–ดํ•  isFormula๋ฅผ false๋กœ ๋ฐ”๊ฟˆ (์ฒซ๋ฒˆ์งธ ๊ฐ’ ์ž…๋ ฅ์‹œ [์ˆ˜์‹]์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ)
							step = 12; //step์„ ๋‹ค์‹œ 12๋กœ, ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹คํ–‰
							loopCheck = true; // false์˜€๋˜ loopCheck๋ฅผ true๋กœ ๋ฐ”๊พธ์–ด ๋‹ค์‹œ๋ฐ˜๋ณต๋ฌธ2๋ฅผ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋„๋กํ•จ
						} else if (selectNumber == 2) {//์ด์–ด์—ฐ์‚ฐ์„ ์„ ํƒํ•˜๋ฉด 
							data[0] = data[3]; //์—ฐ์‚ฐ๊ฒฐ๊ณผ๊ฐ’์„ ์ฒซ๋ฒˆ์งธ ์ˆซ์ž๋กœ ๋Œ€์ž…
							for (int dataIdx = 1; dataIdx < data.length; dataIdx++) {
								data[dataIdx] = 0; // ์ฒซ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ œ์™ธํ•œ ์—ฐ์‚ฐ์ž, ๋‘๋ฒˆ์งธ ์ž…๋ ฅ๊ฐ’, ์—ฐ์‚ฐ๊ฒฐ๊ณผ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” 
							}
							step = 22;//step์„ 22๋กœ ์ดˆ๊ธฐํ™”, ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ๊ตฌ๊ฐ„์„ ์ ํ”„
							loopCheck = true; // false์˜€๋˜ loopCheck๋ฅผ true๋กœ ๋ฐ”๊พธ์–ด ๋‹ค์‹œ๋ฐ˜๋ณต๋ฌธ2๋ฅผ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋„๋กํ•จ
						} else {
							run = false; //๋ฐ˜๋ณต๋ฌธ1(run)์„ ํƒˆ์ถœํ•˜๊ณ  ์ˆซ์ž 1์„ controller๋กœ ๋ฐ˜ํ™˜ -> recordIndex๋ฅผ 1๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•จ (๋ฉ”์ธ๋ฉ”๋‰ด)
						}
					} else {//selectmenu๊ฐ€ 0๋ถ€ํ„ฐ2์˜ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด (1.์ƒˆ๋กœ์—ฐ์‚ฐ 2.์ด์–ด์—ฐ์‚ฐ 0.๋๋‚ด๊ธฐ) ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ
						this.display("\n*** 0~2 ๋ฒ”์œ„์˜ ์ˆซ์ž๋กœ ์ž…๋ ฅํ•˜์„ธ์š” ***\n");
					}
				} else { //์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ๋ฉ”๋‰ด ๊ฐ’์ด ์ •์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉด ์˜ค๋ฅ˜๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ
					this.display("\n*** ์ •์ˆ˜๋กœ ์ž…๋ ฅํ•˜์„ธ์š” ***\n");
				}

			}//๋ฐ˜๋ณต๋ฌธ 3(subMenu)
		} // ๋ฐ˜๋ณต๋ฌธ 1(run)
		return 1;
	}

	/* ์„ ํƒํ•œ ์—ฐ์‚ฐ ๋ฒˆํ˜ธ๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ ํ›„ ๋ฆฌํ„ด */
	private String convertToOperator(int operatorNumber) { //int ๊ฐ’์„ ๋ฐ›์•„์„œ ์—ฐ์‚ฐ์ž ๋ฌธ์ž์—ด๋กœ ์ถœ๋ ฅ(1์ด๋ฉด +, 2์ด๋ฉด -, 3์ด๋ฉด X, 4๋ฉด /)
		String operator = new String();
		if (operatorNumber == 1) {
			operator = "+";
		}
		else if(operatorNumber==2) {
			operator = "-";
		}
		else if(operatorNumber==3) {
			operator = "X";
		}
		else if(operatorNumber==4) {
			operator = "/";
		}
		return operator;
	}

	/* ์—ฐ์‚ฐ์— ์‚ฌ์šฉํ•  subTitle */
	private String makeSubTitle(String subTitle) { //[ ๋ฉ”์ธ(subTitle) ] _________________________________ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ 
		StringBuffer sb = new StringBuffer();
		sb.append("[ ");
		sb.append(subTitle);
		sb.append(" ] ");
		sb.append(" _____________________________\n");
		return sb.toString();
	}

}

๐Ÿ’ป Back.java

package back;

public class Back {

	public Back() {
	}

	public long plus(long digit1, long digit2) { 
		return digit1 + digit2;
	}

	public long minus(long digit1, long digit2) {
		return digit1 - digit2;
	}

	public long product(long digit1, long digit2) {
		return digit1 * digit2;
	}

	public long divide(long digit1, long digit2) {
		return digit1 / digit2;
	}

}

๐Ÿ’ป ์‹คํ–‰ ๊ฒฐ๊ณผ

Loading...

****************************************************

	    JS Framework Calculator  v1.0
		           Designed By Lee Yerim

****************************************************

  [ ๋ฉ”์ธ ] ________________________________________

    1. ์—ฐ์‚ฐํ•˜๊ธฐ     0. ๋๋‚ด๊ธฐ  
  __________________________________ select : 1
****************************************************

	    JS Framework Calculator  v1.0
		           Designed By Lee Yerim

****************************************************

[ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”  ]  _____________________________

3
****************************************************

	    JS Framework Calculator  v1.0
		           Designed By Lee Yerim

****************************************************

[ ์—ฐ์‚ฐ์ž๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š” ]  _____________________________
 [์ˆ˜์‹]  3
[์„ ํƒ : 1. ๋”ํ•˜๊ธฐ  2. ๋นผ๊ธฐ   3. ๊ณฑํ•˜๊ธฐ   4. ๋‚˜๋ˆ„๊ธฐ] : 3
****************************************************

	    JS Framework Calculator  v1.0
		           Designed By Lee Yerim

****************************************************

[ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” ]  _____________________________
 [์ˆ˜์‹]  3 X7
****************************************************

	    JS Framework Calculator  v1.0
		           Designed By Lee Yerim

****************************************************

[ ์—ฐ์‚ฐ๊ฒฐ๊ณผ ]  _____________________________
 3 X 7 = 21

  [ ์—ฐ์‚ฐ ] ________________________________________

    1. ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ         2. ์ด์–ด์„œ ์—ฐ์‚ฐ     0. ์ด์ „ํ™”๋ฉด  
  __________________________________ select : 2
****************************************************

	    JS Framework Calculator  v1.0
		           Designed By Lee Yerim

****************************************************

[ ์—ฐ์‚ฐ์ž๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š” ]  _____________________________
 [์ˆ˜์‹]  21
[์„ ํƒ : 1. ๋”ํ•˜๊ธฐ  2. ๋นผ๊ธฐ   3. ๊ณฑํ•˜๊ธฐ   4. ๋‚˜๋ˆ„๊ธฐ] : 2
****************************************************

	    JS Framework Calculator  v1.0
		           Designed By Lee Yerim

****************************************************

[ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” ]  _____________________________
 [์ˆ˜์‹]  21 -4
****************************************************

	    JS Framework Calculator  v1.0
		           Designed By Lee Yerim

****************************************************

[ ์—ฐ์‚ฐ๊ฒฐ๊ณผ ]  _____________________________
 21 - 4 = 17

  [ ์—ฐ์‚ฐ ] ________________________________________

    1. ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ         2. ์ด์–ด์„œ ์—ฐ์‚ฐ     0. ์ด์ „ํ™”๋ฉด  
  __________________________________ select : 0
****************************************************

	    JS Framework Calculator  v1.0
		           Designed By Lee Yerim

****************************************************

  [ ๋ฉ”์ธ ] ________________________________________

    1. ์—ฐ์‚ฐํ•˜๊ธฐ     0. ๋๋‚ด๊ธฐ  
  __________________________________ select : 0
****************************************************

	    JS Framework Calculator  v1.0
		           Designed By Lee Yerim

****************************************************

  [ EXIT ] ______________________________________

    ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.~  
  ________________________________________________
Closing...

๐Ÿ’ก ์•Œ๊ณ ๋ฆฌ์ฆ˜ + ํ”„๋กœ์„ธ์Šค ๊ฐ™์ด ํ•˜๋ฉด ๋ณต์žกํ•ด์ง
ํ”„๋กœ์„ธ์Šค ๋จผ์ € ์„ค๊ณ„ ํ•˜๊ธฐ -> ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ์ข€ ๋” ์ˆ˜์›”

 

๐Ÿ’ก false๋‚˜ true๋ฅผ ๊ฐ™์€ ๊ณต๊ฐ„์— ์ €์žฅํ• ๋•Œ ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

๋ฐ˜์‘ํ˜•