어제꺼 이어서 작업했다.
TIL 작성법
가상의 메뉴판을 하나 만들고 상품을 선택하여 주문하기, 취소하기에 기능을 가진 키오스크 만들기
각 메뉴를 print로 만들고 이동시 필요한 정보(input)은 scanner로 받아서 정보에 따라 맞는 페이지를 출력한다.
++ 메뉴판 내용을 매개변수 -> List로 출력하기로 했다.
오류 & 해결
1. 메인 메뉴 출력 -> 상품 메뉴 출력을 하고 반복문을 돌리니 반복할 수록 메인 메뉴가 중복되서 나온다. 메인 메뉴 메소드에 add가 있어 반복때마다 List에 추가되는 모양
public void mainMenu() {
mainMenus.add(new Menu(1, "Coffee", "다양한 원두가 있는 커피"));
mainMenus.add(new Menu(2, "NonCoffee", "프라페, 차 등의 다양한 음료"));
mainMenus.add(new Menu(3, "Cake", "투썸만에 오리지널 케잌과 계절감 있는 다양한 케이크"));
for(Menu val: mainMenus){
System.out.println(val.num + " . " + String.format("%-10s",val.name) + "|" + val.detail);
}
}
메소드 호출하면 추가되는 건 어쩔 수 없는 부분이라 add와 output으로 분리해서 해결했다.
public void mainMenu() {
mainMenus.add(new Menu(1, "Coffee", "다양한 원두가 있는 커피"));
mainMenus.add(new Menu(2, "NonCoffee", "프라페, 차 등의 다양한 음료"));
mainMenus.add(new Menu(3, "Cake", "투썸만에 오리지널 케잌과 계절감 있는 다양한 케이크"));
}
public void mainMenuOutput() {
for(Menu val: mainMenus){
System.out.println(val.num + " . " + String.format("%-10s",val.name) + "|" + val.detail);
}
orderMenu = sc.nextInt();
product.setNum(screen.coffeeList.get(orderMenu).num);
orderList.add(new Product(product.getNum(), product.getName(), product.getPrice(), product.getDetail()));
orderMenu = sc.nextInt();
orderMenu = orderMenu - 1;
product.setNum(screen.coffeeList.get(orderMenu).num);
product.setName(screen.coffeeList.get(orderMenu).name);
product.setPrice(screen.coffeeList.get(orderMenu).price);
product.setDetail(screen.coffeeList.get(orderMenu).detail);
print만 있는 메소드라면 반복문을 돌려도 동일하게 나오지만 add로 리스트에 추가하는 코드가 있는 메소드라면 리스트 내용이 계속 추가된다, 왠만하면 둘은 분리해서 쓸 것
우선 get,set은 위와 같은 내용으로 쓰는 건 옳지 않다.
기본적으로는 다른 클래스에 있는 고정되어 있는(수정은 가능) 값을 get으로 가져오는 것인데 2번 해결책의 경우 set에 계속 덮어씌우는 방법이라 좋은 방법이라 볼 수 없다.
* 선언(필드별로 해야함)
public void setNum(int num){
this.num = num;
}
public int getNum(){
return num;
}
* 데이터 세팅, 가져오기는 위 선언한 필드를 인스턴스로 가져온 클래스에서 가능
- set 설정
product.setName("boby");
- 출력(결과 동일)
System.out.println(product.name);
System.out.println(product.getName());
- add
orderList.add(new Product(product.getNum(), product.getName());