๐Ÿ“š TIL 14์ผ์ฐจ

temprmnยท2023๋…„ 6์›” 2์ผ
0
post-thumbnail

์˜ค๋Š˜์˜ ์ฃผ์š”์‚ฌํ•ญ (6/2, ๊ธˆ์š”์ผ)

  1. ํ‚ค์˜ค์Šคํฌ ๊ตฌํ˜„ ๊ณผ์ œ ๋งˆ๋ฌด๋ฆฌ
  2. ๊ณผ์ œ ํšŒ๊ณ 

์™„๋ฃŒํ•œ ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๊ธฐ

๐Ÿฑ Java-Kiosk

ํ‚ค์˜ค์Šคํฌ ๊ตฌํ˜„ ๊ณผ์ œ ๋งˆ๋ฌด๋ฆฌ

๊ตฌ์กฐ ์„ค๊ณ„ #3

์ตœ์ข…์ ์œผ๋กœ ํ™”๋ฉด(= ์ถœ๋ ฅ ๋ถ€๋ถ„)์—์„œ ์ž…๋ ฅ ๊ฐ’์„ ๋ฐ›์€ ํ›„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ํ‚ค์˜ค์Šคํฌ(= ์ปจํŠธ๋กค๋Ÿฌ ๋ถ€๋ถ„)์—์„œ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ฒฐ์ •๋˜์—ˆ๋‹ค. MVC ํŒจํ„ด์— ๋Œ€ํ•ด ๊ฐ„๊ฒฐํ•˜๊ฒŒ๋‚˜๋งˆ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ž…๋ ฅ์€ [์ปจํŠธ๋กค๋Ÿฌ]์—์„œ ๋ฐ›๊ณ , [์ถœ๋ ฅ]์—์„œ๋Š” ๋ง ๊ทธ๋Œ€๋กœ '์ถœ๋ ฅ'๋งŒ ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ฝ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ์ž…ยท์ถœ๋ ฅ์„ ์ฝ˜์†”ํ™”๋ฉด์—์„œ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์—, ์ด ํ˜•ํƒœ๊ฐ€ ๊ฐ€์žฅ ๊น”๋”ํ•  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ด์„œ ์ด ๋ฐฉ๋ฒ•์„ ์„ ํƒํ–ˆ๋‹ค. (ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๊ธฐ๋„ ํ–ˆ๊ณ ) ์•„๋ฌดํŠผ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ฒ˜๋ฆฌํ•˜๋‹ˆ ๋‚˜์˜์ง€ ์•Š์€ ํ˜•ํƒœ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

ํ‚ค์˜ค์Šคํฌ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ์—๋„ ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ–ˆ๋‹ค. ๊ฐ€์žฅ ๋จผ์ € ๋– ์˜ค๋ฅธ ๋ฐฉ๋ฒ•์ด while(true)๋ฌธ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฑฐ์˜€๋Š”๋ฐ, ์ด๊ฒŒ '๋ณดํŽธ์ ์ธ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ฉด ์–ด๋–กํ•˜์ง€?' ๋ผ๋Š” ์ƒ๊ฐ์ด ๋‚˜๋ฅผ ๊ฝค ์˜ค๋žœ๊ธฐ๊ฐ„ ๊ดด๋กญํ˜”๋‹ค. (๊ฒฐ๊ตญ ๊ทธ๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ–ˆ์ง€๋งŒ) ํ›„์— ๋‹ค๋ฅธ ํ•™์ƒ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋„ ํ™•์ธํ•˜๊ณ  ๋‚˜์„œ์•ผ ์•ˆ์‹ฌํ–ˆ๋‹ค.

Screen์—์„œ ์ž…๋ ฅ๊ฐ’ ๋ฐ˜ํ™˜ ๋ฐ›๊ณ  Kiosk์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ

์•„๋ž˜๋Š” ์ฝ”๋“œ ์ค‘ ์ผ๋ถ€์ด๋‹ค.

๐Ÿ“‚Screen.java
// 1-1. ๋ฉ”์ธ ์กฐํšŒ
public int viewMainMenu(){
    
    /* 1. ์ƒ๋‹จ๋ฉ”๋‰ด [ SHAKESHACK MENU ] */
    System.out.printf("์•„๋ž˜ ์ƒํ’ˆ๋ฉ”๋‰ดํŒ์„ ๋ณด์‹œ๊ณ  ์ƒํ’ˆ์„ ๊ณจ๋ผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.\n\n");
    /* ์ƒ๋žต */
    
    // ์ž„์‹œ List ์ƒ์„ฑ
    List<MainMenu> mainMenus = order.getRepo().getMainMenuList();    
    // ๋ฉ”๋‰ด ์ถœ๋ ฅ
    int i = 0;
    for(; i < mainMenus.size(); i++) {
        /* ์ƒ๋žต */
    }
    
    /* 2. ํ•˜๋‹จ๋ฉ”๋‰ด [ ORDER MENU ] */
    System.out.printf("[ ORDER MENU ]\n");
    /* ์ƒ๋žต */
    
    /* 3. ์„ ํƒ */
    System.out.printf("์„ ํƒ: ");
    // (์ž…๋ ฅ ๊ฐ’ - 1) ๋ฐ˜ํ™˜, index๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘์ด๋ฏ€๋กœ.
    int select = sc.nextInt() - 1;
    return select;
}

viewMainMenu() ๋ฉ”์„œ๋“œ์—์„œ๋Š” ์„ ํƒ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , Scanner๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ’์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  index๊ฐ€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜์—ฌ ์‹ค์ œ ์ž…๋ ฅ ๊ฐ’ - 1๋งŒํผ์„ int select ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ , ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ“‚Kiosk.java
// ์‹ค์ œ๋กœ ๋Œ์•„๊ฐ€๋Š” ํ‚ค์˜ค์Šคํฌ
private void processKiosk() {
    
    // ### ์ฐธ๊ณ  ### selectMain = (์ž…๋ ฅ๊ฐ’ - 1) ์ด๋‹ค.
    int selectMain  = 0;
    
    while (true) {
        // ### ๋ฉ”์ธ๋ฉ”๋‰ด ์ง„์ž…        
        selectMain = screen.viewMainMenu();

		// ์ž…๋ ฅ๊ฐ’์ด ๋“ฑ๋ก๋œ ๋ฉ”์ธ๋ฉ”๋‰ด ๊ฐœ์ˆ˜๋ณด๋‹ค ์ ๊ฑฐ๋‚˜ ๊ฐ™์Œ
        //  = ๋ฉ”์ธ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ–ˆ๋‹ค! ๋Š” ๋œป
        // ### PRODUCT MENU ####
        if (selectMain < mainSize) {
            // ์ „๋‹ฌํ•  ์ด๋ฆ„(String)์„ ๋ฏธ๋ฆฌ ๋ฐ›์•„์˜ด
            String mainMenuName = order.getRepo().getMainMenuName(selectMain); 
            // ### 1. ์ƒํ’ˆ ๋ฉ”๋‰ด ํ˜ธ์ถœ ํ›„,
            // ### ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋„ฃ์„ ์ƒํ’ˆ์„ ๋ฐ˜ํ™˜ ๋ฐ›์Œ
            ProductMenu product = screen.viewProductMenu(mainMenuName);
            
        ...

processKiosk() ๋ฉ”์„œ๋“œ์˜ int selectMain ๋ณ€์ˆ˜๊ฐ€ ์•ž์˜ Screen.viewMainMenu()์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์„ ํƒ ๊ฐ’(์ž…๋ ฅ ๊ฐ’)์„ ๋ฐ›์œผ๋ฉด, ํ‚ค์˜ค์Šคํฌ ๋‚ด๋ถ€์—์„œ ํŒ๋ณ„ํ•˜์—ฌ ์„ ํƒ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ๋‹ค์‹œ ์ถœ๋ ฅํ•˜๋„๋ก ํ•˜๋Š” ํ˜•์‹์ด๋‹ค.

์•„๋ž˜์˜ ๋ฌธ์žฅ์€ ProductMenu๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ์ด๋Š” ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ €์žฅํ•  ๋ฌผ๊ฑด์„ ์ „๋‹ฌ๋ฐ›๊ธฐ ์œ„ํ•จ์ด๋‹ค.

ProductMenu product = screen.viewProductMenu(mainMenuName);

MainMenu์™€ ProductMenu ํด๋ž˜์Šค๋Š” ํ•„๋“œ์™€ getter, setter๋งŒ์ด ์กด์žฌํ•œ๋‹ค. ๋‹ค๋ฅธ ์ •๋ณด์ฒ˜๋ฆฌ๋Š” ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ๋„ ์ด ๋‘ ํด๋ž˜์Šค์— ์˜ํ–ฅ์„ ์ฃผ๊ณ  ์‹ถ์ง€ ์•Š์•„์„œ MenuRepository๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ด ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ํ•˜๋“œ์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด์ฃผ์—ˆ๋‹ค.

MainMenu์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ปจํ…Œ์ด๋„ˆ๋Š” List<T>๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค. ProductMenu์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ปจํ…Œ์ด๋„ˆ๋กœ๋Š” Map<Key, Value>๋กœ ๊ฒฐ์ •ํ–ˆ๋Š”๋ฐ, ๋ฉ”์ธ๋ฉ”๋‰ด์˜ ์ด๋ฆ„์„ Key๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฉ”์ธ๋ฉ”๋‰ด์˜ ์ด๋ฆ„์„ ํ†ตํ•ด ์ƒํ’ˆ๋ฉ”๋‰ด์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด์—ˆ๋‹ค.

/* ํ•„๋“œ */
// 1. ๋ฉ”์ธ๋ฉ”๋‰ด
private List<MainMenu> mainMenuList = new ArrayList<>();

// 2. ์ƒํ’ˆ๋ฉ”๋‰ด
private Map<String, List<ProductMenu>> productMenuMap = new HashMap<>();

productMenuMap์— ๋“ค์–ด๊ฐˆ List<ProductMenu> productMenuList ๋ณ€์ˆ˜๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ• ๊นŒ ๊ณ ๋ฏผํ–ˆ์—ˆ๋Š”๋ฐ, ์˜คํžˆ๋ ค ์ดํ›„์— ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ๋•Œ ํ˜ผ์„ ์„ ์ฃผ์–ด์„œ ์‚ญ์ œํ–ˆ๋‹ค.

์ •๋ณด๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ํ•˜๋“œ์ฝ”๋”ฉ ํ•ด์ฃผ์—ˆ๋‹ค.

/* ์ •๋ณด ์ €์žฅ */
private void saveInformation() {

	// ### ๋ฉ”์ธ๋ฉ”๋‰ด MainMenu
    mainMenuList.add(new MainMenu("Burgers", "์•ต๊ฑฐ์Šค ๋น„ํ”„ ํ†ต์‚ด์„ ๋‹ค์ ธ๋งŒ๋“  ๋ฒ„๊ฑฐ"));
    mainMenuList.add(new MainMenu("Forzen Custard", "๋งค์žฅ์—์„œ ์‹ ์„ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์•„์ด์Šคํฌ๋ฆผ"));
    mainMenuList.add(new MainMenu("Drinks", "๋งค์žฅ์—์„œ ์ง์ ‘ ๋งŒ๋“œ๋Š” ์Œ๋ฃŒ"));
    mainMenuList.add(new MainMenu("Beer", "๋‰ด์š• ๋ธŒ๋ฃจํด๋ฆฐ ๋ธŒ๋ฃจ์–ด๋ฆฌ์—์„œ ์–‘์กฐํ•œ ๋งฅ์ฃผ"));
    
    // ### ์ƒํ’ˆ๋ฉ”๋‰ด ProductMenu
    // ์ƒํ’ˆ๋ฉ”๋‰ด๋ฅผ ์ €์žฅํ•  ์ž„์‹œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธ
    List<ProductMenu> productMenuList = new ArrayList<>();
    
    /* Burgers */
    productMenuList.add(new ProductMenu("ShackBurger", 6.9f, "ํ† ๋งˆํ† , ์–‘์ƒ์ถ”, ์‰‘์†Œ์Šค๊ฐ€ 
    productMenuList.add(new ProductMenu("SmokeShack", 8.9f, "๋ฒ ์ด์ปจ, ์ฒด๋ฆฌ ํŽ˜ํผ์— ์‰‘์†Œ์Šค๊ฐ€
    productMenuList.add(new ProductMenu("Shroom Burger", 9.4f, "๋ชฌ์Šคํ„ฐ ์น˜์ฆˆ์™€ ์ฒด๋‹ค ์น˜์ฆˆ
    productMenuList.add(new ProductMenu("Cheeseburger", 6.9f, "ํฌํ…Œ์ดํ†  ๋ฒˆ๊ณผ ๋น„ํ”„ํŒจํ‹ฐ, 
    productMenuList.add(new ProductMenu("Hamburger", 5.4f, "๋น„ํ”„ํŒจํ‹ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์•ผ์ฑ„๊ฐ€ ๋“ค์–ด
    
    // put() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด
    // ์ด๋ฆ„<Key>๊ฐ’๊ณผ ์ƒํ’ˆ๋ฉ”๋‰ด<Value>๊ฐ’์„ ์ €์žฅ
    productMenuMap.put(mainMenuList.get(0).getName(), productMenuList);   
    // ์ €์žฅ ํ›„์—๋Š” ๋‹ค์Œ ์ •๋ณด๋ฅผ ์œ„ํ•ด ์ž„์‹œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค
    productMenuList = new ArrayList<>();

์ •๋ณด๋ฅผ ์ฐพ์„ ๋•Œ๋Š” getter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์™ธ๋ถ€์—์„œ ์šฉ๋„๋ณ„(๋ฆฌ์ŠคํŠธ ์ „์ฒด ํ˜ธ์ถœ, ์ด๋ฆ„๋งŒ ํ˜ธ์ถœ ๋“ฑ)๋กœ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค.

// 1-1. ๋ฉ”์ธ๋ฉ”๋‰ด ๋ฆฌ์ŠคํŠธ ์ „์ฒด
public List<MainMenu> getMainMenuList() {
    return mainMenuList;
}
// 1-2. ๋ฉ”์ธ๋ฉ”๋‰ด ์ด๋ฆ„๋งŒ
public String getMainMenuName(int index) {
    return mainMenuList.get(index).name;
}
// 1-3. ๋ฉ”์ธ๋ฉ”๋‰ด ์„ค๋ช…๋งŒ
public String getMainMenuExplain(int index) {
    return mainMenuList.get(index).explain;
}

// 2-1. ์ƒํ’ˆ๋ฉ”๋‰ด ๋ฆฌ์ŠคํŠธ ์ „์ฒด
public List<ProductMenu> getProductList(String mainMenuName) {
    // key ๊ฐ’์— ๋งž๋Š” List ๋ฐ˜ํ™˜
    return productMenuMap.get(mainMenuName);        
}
// 2-2. ์ƒํ’ˆ๋ฉ”๋‰ด์—์„œ ์ƒํ’ˆ ํ•˜๋‚˜๋งŒ
public ProductMenu getProduct(String mainMenuName, int index) {
    return productMenuMap.get(mainMenuName).get(index);
}

์ƒํ’ˆ์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ€๊ฒฉ๋งŒ๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์œผ๋ฉด ํ˜ธ์ถœ์‹œ ์ฝ”๋“œ๊ฐ€ ์ข€ ๋” ๊น”๋”ํ•ด์ง€์ง€ ์•Š์•˜์„๊นŒ ์‹ถ๋‹ค. (์•„๋ž˜์ฒ˜๋Ÿผ)

// ์ƒํ’ˆ๋ฉ”๋‰ด์—์„œ ์ƒํ’ˆ ํ•˜๋‚˜์˜ ๊ฐ€๊ฒฉ๋งŒ
public float getProductPrice(String mainMenuName, int index) {
	return productMenuMap.get(mainMenuName).get(index).getPrice();
}

๊ฒฐ๊ณผ ์Šคํฌ๋ฆฐ์ƒท

๐Ÿ“– KPT ํšŒ๊ณ 

1. ํ”„๋กœ์ ํŠธ ํ๋ฆ„

1) ํ•œ ์ผ

  1. ํ”„๋กœ์ ํŠธ ๋ช…: Java ํ‚ค์˜ค์Šคํฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ํ”„๋กœ์ ํŠธ

  2. ํ•„์ˆ˜ ์ž‘์—…: ๋ฉ”๋‰ดํŒ ์กฐํšŒ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์กฐํšŒ, ์กฐํšŒ ํ›„ ๊ตฌ๋งค ํ˜น์€ ์ทจ์†Œ, ์ฃผ๋ฌธ ์ทจ์†Œ(์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ดˆ๊ธฐํ™”), ๋Œ€๊ธฐ๋ฒˆํ˜ธ ๋ฐœ๊ธ‰, ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒ ๊ฐ’ ์ž…๋ ฅ

  3. ์ถ”๊ฐ€ ์ž‘์—…: ์ •๋ณด ์ €์žฅ(๋ฆฌํฌ์ง€ํ† ๋ฆฌ)

2. Keep

  • ๊ตฌ์กฐ ์„ค๊ณ„๋ฅผ ์ ๊ทน์ ์œผ๋กœ ๊ณ ๋ฏผํ•˜๊ณ  ์‹คํ–‰ํ•จ
  • ์ฝ”๋“œ ์ž‘์„ฑ์— ํ•„์š”ํ•œ ์ด๋ก ์„ ์ถ”๊ฐ€๋กœ ํ•™์Šต

3. Problem

1) ๋ฌธ์ œ

  • ๊ตฌ์กฐ ์„ค๊ณ„๋ฅผ ํ•œ ๊ฒƒ๋งŒํผ ์›ํ™œํ•˜๊ฒŒ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์ง€ ์•Š์Œ (ํŠนํžˆ ์ปจํŠธ๋กค๋Ÿฌ)

2) ์›์ธ

  • ์ฝ”๋“œ ์ž‘์„ฑ ๊ฒฝํ—˜ ๋ถ€์กฑ
  • ์ด๋ก  ํ•™์Šต ๋ถ€์กฑ

4. Try

  • ๋” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๋ณด์ž
  • ์ด๋ก ์ ์ธ ๋ถ€๋ถ„์— ์น˜์ค‘๋˜๊ธฐ ๋ณด๋‹ค๋Š” ์ง์ ‘ ์‹คํ–‰ํ•ด๋ณด๋ฉด์„œ ๋ชธ์œผ๋กœ(?) ์ตํžˆ์ž
profile
`ISFJ` T 49% F 51% /

0๊ฐœ์˜ ๋Œ“๊ธ€