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

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

     

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

    ๐Ÿ’ป 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๋ฅผ ๊ฐ™์€ ๊ณต๊ฐ„์— ์ €์žฅํ• ๋•Œ ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

    ๋ฐ˜์‘ํ˜•

    'JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    #15 [Java] Date Class, .toUpperCase(), .toLowerCase(),  (0) 2022.10.27
    #14 [Java]  (0) 2022.10.27
    #12 [Java]  (0) 2022.10.27
    #11 [Java] Try-catch, .parseInt(), Casting, Boxing, Unboxing  (0) 2022.10.27
    #10 [Java] ๋ฐฐ์—ด, ์˜ค๋ฒ„๋กœ๋”ฉ  (0) 2022.10.27

    ๋Œ“๊ธ€