★객체2★

Noome_·2022년 4월 22일
0
post-thumbnail

🍔 햄버거 가게 주문 서비스 만들기

(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 타입이 없다.

  • 클래스는 객체를 만들기 위해 꼭 필요한 설계도이고, 생성자가 없으면 객체를 만들 수도 없음
    --> 클래스 안에는 생성자가 꼭 포함되어 있어야 한다.

profile
철수네 개발자

0개의 댓글

관련 채용 정보