์ค๋์ ์ฃผ์์ฌํญ (6/2, ๊ธ์์ผ)
- ํค์ค์คํฌ ๊ตฌํ ๊ณผ์ ๋ง๋ฌด๋ฆฌ
- ๊ณผ์ ํ๊ณ
์๋ฃํ ํ๋ก์ ํธ๋ ์ฌ๊ธฐ
๐ฑ Java-Kiosk
์ต์ข
์ ์ผ๋ก ํ๋ฉด
(= ์ถ๋ ฅ ๋ถ๋ถ)์์ ์
๋ ฅ ๊ฐ์ ๋ฐ์ ํ ๋ฐํํ๊ณ , ํค์ค์คํฌ
(= ์ปจํธ๋กค๋ฌ ๋ถ๋ถ)์์ ๋ฐํ ๊ฐ์ ์ฌ์ฉํ๋ ํํ๋ก ๊ฒฐ์ ๋์๋ค. 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);
MenuRepository
์ ๋ฐ์ดํฐ ์ ์ฅMainMenu
์ ProductMenu
ํด๋์ค๋ ํ๋
์ getter
, setter
๋ง์ด ์กด์ฌํ๋ค. ๋ค๋ฅธ ์ ๋ณด์ฒ๋ฆฌ๋ ํ์ง ์๋๋ค. ์ ๋ณด๋ฅผ ์ ์ฅํ ๋๋ ์ด ๋ ํด๋์ค์ ์ํฅ์ ์ฃผ๊ณ ์ถ์ง ์์์ MenuRepository
๋ผ๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ์์ฑํ์ฌ ์ด ํด๋์ค ๋ด๋ถ์์ ํ๋์ฝ๋ฉํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ณด๋ฅผ ์ ์ฅํด์ฃผ์๋ค.
MenuRepository.java
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();
}
ํ๋ก์ ํธ ๋ช : Java ํค์ค์คํฌ ๊ธฐ๋ฅ ๊ตฌํ ํ๋ก์ ํธ
ํ์ ์์ : ๋ฉ๋ดํ ์กฐํ, ์ฅ๋ฐ๊ตฌ๋ ์กฐํ, ์กฐํ ํ ๊ตฌ๋งค ํน์ ์ทจ์, ์ฃผ๋ฌธ ์ทจ์(์ฅ๋ฐ๊ตฌ๋ ์ด๊ธฐํ), ๋๊ธฐ๋ฒํธ ๋ฐ๊ธ, ์ฌ์ฉ์๊ฐ ์ ํ ๊ฐ ์ ๋ ฅ
์ถ๊ฐ ์์ : ์ ๋ณด ์ ์ฅ(๋ฆฌํฌ์งํ ๋ฆฌ)