(1) 가게 운영을 위해 Main, Menu, MenuBeverage, MenuHamburger, MenuSide 클래스를 만들어준다.
<Menu 클래스>
import java.util.Scanner;
import com.kh.kfc.main.Main;
public class Menu {
Scanner sc = new Scanner (System.in);
//메뉴판 보여주기
public int showMenu() {
System.out.println("=========Menu=========");
System.out.println("1. 햄버거");
System.out.println("2. 음료");
System.out.println("3. 사이드");
int menu = Integer.parseInt(sc.nextLine()); //string 타입의 문자열로 int로 변환하는 메소드
switch(menu) {
case 1: return 1; //break; //return을 만나면 어차피 다음 줄이 실행될 일이 없으므로 break와 같이 써주면 안 됨.
case 2: return 2; //break;
case 3: return 3; //break;
default : System.out.println("error!!!(메뉴 선택 중 에러 발생)");
return -1;
}
}
//주문 더 할건지 물어보기
public void more() {
System.out.println("추가 주문을 하시겠습니까? (Y/N)");
String answer = sc.nextLine();
// if(answer.equals("Y")) {
// Main.finish = false;
// } else {
// Main.finish = true;
// }
Main.finish = answer.equals("Y") || answer.equals("y")? false: true;
}
}
-----------------------------------------------------------
<MenuBeverage 클래스>
import java.util.Scanner;
import com.kh.kfc.main.Main;
public class MenuBeverage {
Scanner sc = new Scanner(System.in);
public void showMenuBeverage() {
System.out.println("=====음료=====");
System.out.println("1. 콜라 (1000원)");
System.out.println("2. 환타 (1500원)");
System.out.println("3. 우유 (2000원)");
int menu = Integer.parseInt(sc.nextLine());
switch(menu) {
case 1:
Main.total += 1000;
Main.menuAll += "콜라";
System.out.println("콜라 (1000원) 을 선택하셨습니다.");
break;
case 2:
Main.total += 1500;
Main.menuAll += "환타";
System.out.println("환타(1500원) 을 선택하셨습니다.");
break;
case 3:
Main.total += 2000;
Main.menuAll += "우유";
System.out.println("우유 (2000원) 을 선택하셨습니다.");
break;
default :
System.out.println("그런 음료 없음");
}
}
--------------------------------------------------------------
<MenuHamburger 클래스>
import java.util.Scanner;
import com.kh.kfc.main.Main;
public class MenuHamburger {
Scanner sc = new Scanner(System.in);
public void showMenuHam() {
System.out.println("======햄버거=====");
System.out.println("1. 불고기 버거 (5000원)");
System.out.println("2. 타워 버거(8000원)");
System.out.println("3. 징거 버거(7000원)");
int menu = Integer.parseInt(sc.nextLine());
switch(menu) {
case 1:
Main.total += 5000; //Main클래스에 있는 total이라는 클래스를 찾아가서 5000을 더해준다.
Main.menuAll += "불고기 버거";
System.out.println("불고기 버거 (5000원) 을 선택하셨습니다.");
break;
case 2:
Main.total += 8000;
Main.menuAll += "타워 버거";
System.out.println("타워 버거 (8000원) 을 선택하셨습니다.");
break;
case 3:
Main.total += 7000;
Main.menuAll +="징거 버거";
System.out.println("징거 버거 (7000원) 을 선택하셨습니다");
break;
default :
System.out.println("그런 햄버거 없음");
}
}
}
-------------------------------------------------------------
<MenuSide 클래스>
import java.util.Scanner;
import com.kh.kfc.main.Main;
public class MenuSide {
Scanner sc = new Scanner(System.in);
public void showMenuSide() {
System.out.println("=====사이드=====");
System.out.println("1. 감자튀김 (3000원)");
System.out.println("2. 닭껍질튀김 (2000원)");
System.out.println("3. 치즈스틱 (1000원)");
int menu = Integer.parseInt(sc.nextLine());
switch(menu) {
case 1:
Main.total += 3000;
Main.menuAll += "감자튀김";
System.out.println("감자튀김 (3000원) 을 선택하셨습니다.");
break;
case 2:
Main.total += 2000;
Main.menuAll += "닭껍질튀김";
System.out.println("닭껍질튀김 (2000원) 을 선택하셨습니다.");
break;
case 3:
Main.total += 1000;
Main.menuAll += "치즈스틱";
System.out.println("치즈스틱 (1000원) 을 선택하셨습니다.");
break;
default :
System.out.println("그런 사이드 없음");
}
}
}
-------------------------------------------------------------
<Main 클래스>
import com.kh.kfc.obj.Menu;
import com.kh.kfc.obj.MenuBeverage;
import com.kh.kfc.obj.MenuHamburger;
import com.kh.kfc.obj.MenuSide;
public class Main {
//누구든지 접근할 수 있는 창고 같은 공간. 프로그램이 시작할 때부터 끝날 때까지 --> static을 사용한다.
public static int total;//static은 다른 클래스에서 스태틱명과 변수명 같이 써줘야함 (Main.total, Main.menuAll, Main.finish 처럼)(Main은 같은 클래스 내에서라면 생략이 가능하기는 함)
public static String menuAll = ""; //빈문자열을 만들어주지 않으면 NULL + "ABC"가 되기때문에 제대로 출력이 되지 않는다. 따라서 "" + "ABC"로 해주는것
public static boolean finish = false;
public static void main(String[] args) { //메인메서드부터 프로그램이 시작된다.
System.out.println("KFC 에 오신 걸 환영합니다. ");
//메뉴판 객체 생성
Menu menu = new Menu();
MenuHamburger menuham = new MenuHamburger();
MenuBeverage menuBev = new MenuBeverage();
MenuSide menuSide = new MenuSide();
do {
//메뉴 선택 (대분류)
int menuNum= menu.showMenu();//Menu 클래스의 ShowMenu 호출하기
//상세메뉴판 보여주기. switch문을 사용해도 상관 없다.
if(menuNum == 1) {
//햄버거 메뉴판 보여주기
menuham.showMenuHam();
} else if(menuNum == 2) {
//음료 menu메뉴판 보여주기
menuBev.showMenuBeverage();
} else if(menuNum == 3 ){
//사이드 메뉴판 보여주기
menuSide.showMenuSide();
} else {
//사용자가 잘못 고름
System.out.println("숫자 잘못 누름");
}
//주문 더 할건지?
menu.more();
} while(!Main.finish);//피니쉬가 아닐때 반복되는 것임.
//최종 결과 출력
System.out.println("주문하신 메뉴는 : " + Main.menuAll +" 입니다.");
System.out.println("총 가격은 : "+ Main.total + " 원 입니다.");
} //main메서드가 끝나면 프로그램도 종료한다.
}
위와 같이 main메소드에 잘 호출이 되어 프로그램이 실행되는 것을 알 수 있다.
.
.
.
.
.
.
프로그램을 만드면서 알게 된 것
1. static ?
public static int total;
public static String menuAll = "";
public static boolean finish = false;
Main 클래스에서 작성한 static 은 누구든지 접근할 수 있는 창고 같은 공간이다. 프로그램이 시작할 때부터 끝날 때까지 사용할 수 있다.
--> 접근 제어자 뒤에 static을 사용한다.
static 사용시에는 다른 클래스에서 static명과 변수명을 같이 써줘야함 (Main.total, Main.menuAll, Main.finish 처럼)
-->Main 클래스에서 static을 써줬다는 의미로
(Main은 같은 클래스 내에서라면 생략이 가능하기는 함)
public static String menuAll = ""; //""와 같은 빈문자열을 만들어주지 않으면 NULL + "ABC"가 되기때문에 제대로 출력이 되지 않는다. 따라서 "" + "ABC"로 해주는것
2. 생성자?
메소드 작성은
[접근제한자] 반환타입 메소드명 (..) {실행할 내용}
생성자 작성은
[접근제한자] 클래스명(...) {실행할 내용}
생성자(==기본 생성자) // [접근제한자] 클래스이름(){}
ex) public MenuHamburger() {} //기본생성자는 생략된다.
생성자가 없으면 객체를 만들 수 없다. 생략되기 때문에 모르는 것뿐임. 생성자는 생성 역할만 하기때문에 (객체 초기화만 담당하므로) return 타입이 없다.
클래스는 객체를 만들기 위해 꼭 필요한 설계도이고, 생성자가 없으면 객체를 만들 수도 없음
--> 클래스 안에는 생성자가 꼭 포함되어 있어야 한다.