JAVA 개인 프로젝트(Kiosk) 정리

diddbsckd456·2022년 9월 8일
0

설계

먼저 처음 프로젝트를 만들기 전에 설계를 생각으로 간단하게 해봤다.

  • 국비과정 전에 예습으로 배웠던 약 한달간의 자바1 과정에서 강사님이 잠깐 보여주셨던 키오스크 만드는 것을 발전시켜서 국비과정에서 배웠던 것들을 넣어보자.

  • class를 두개 더 만들어서 coffee에 관련된 변수들을 정리하고, bread에 관련된 변수들을 정리해서 getter, setter를 이용해서 만들어보자.

  • 강사님이 while문과 if문을 사용하셨는데 나도 while문과 if문을 사용하지만 나는 각 선택들 마다 사용자가 값을 잘못 입력했을 때 다시 입력하게 하자.

  • 일단 프로젝트 완성이 우선이다.

  • 완성이 일찍 된다면 주문을 여러개 받는 것도 해보자.

라고 일단 크게 생각으로만 설계를 했었는데 마지막것 빼고는 다 생각한대로 됐다.
근데 다 만들고 나니까 너무 쉽게 만들었나, 열심히 하지 않았나, 배운것들을 조금 더 넣어서 더 그럴듯하게 만들었어야했나 하는 생각이 들었다.

사용한 문법

Scanner

Scanner는 사용자에게 값을 입력받기 위해 사용했다.
먼저 스캐너 클래스를 선언을 해주고 sc.nextInt를 이용해서 음료를 주문한다면 1을, 주문하지 않는다면 2를 입력 받고, Coffee 클래스에 만들어뒀던 DrinkOrder라는 변수에 cf.setDrinkOrder() 를 통해 저장해주는 식으로 사용했다.

Scanner sc = new Scanner(System.in);

while (true) {
			System.out.println("음료를 주문하시겠습니까?");
			System.out.println("예 : 1, 아니오 : 2");
			cf.setDrinkOrder(sc.nextInt());
			if (cf.drinkOrder == 1) {
				break;
			}
			if (cf.drinkOrder == 2) {
				break;
			} else {
				System.out.println("다시 입력해주세요.");
				continue;
			}
		}

while문, if문

이 프로젝트를 하면서 가장 많이 쓴 문법이 while문과 if문이다.
while문과 if문은 거의 같이 사용했기 때문에 같이 정리를 해봤다.

drinkOrder 라는 변수는 사용자가 음료를 주문 할 것인지, 안할 것인지를 선택한 값을 저장한 변수다.
while문을 통해 사용자가 1(주문을 한다)을 입력했을 때, 2(주문을 안한다)를 입력했을 때 실행될 경우를 따로 만들어두었다.

음료를 주문한다고 하면 메뉴판을 출력해주고 Coffee 클래스에 만들어둔 drinkChoice 라는 변수에 cf.setDrinkOrder를 통해 sc.nextInt() 를 이용해서 입력받은 커피를 선택한 값을 저장한다.

if문을 통해서는 사용자가 각 커피를 선택한 상황을 설정하고, 선택한 값에 해당하는 커피의 가격을 totalPrice에 저장해서 나중에 결제하거나 영수증을 출력할 때 사용할 수 있게 했다.
커피의 가격들은 coffee라는 클래스를 따로 만들어 설정해두었다.

while (cf.drinkOrder == 1) { // 음료 메뉴판 출력 while문 시작
			// 메뉴판 출력
			System.out.println("-----음료 메뉴-----");
			System.out.println(cf.toString());
			System.out.println("----------------");

			// 커피 선택
			System.out.print("입력 : ");
			cf.setDrinkChoice(sc.nextInt());
			System.out.println();

			if (cf.drinkChoice == 1) { // 아메리카노
				totalPrice += cf.getAmericano();
				break;
			} else if (cf.drinkChoice == 2) { // 카페라떼
				totalPrice += cf.getCafelatte();
				break;
			} else if (cf.drinkChoice == 3) { // 바닐라라떼
				totalPrice += cf.getVanilalatte();
				break;
			} else if (cf.drinkChoice == 4) { // 자몽에이드
				totalPrice += cf.getZade();
				break;
			} else if (cf.drinkChoice == 5) { // 레몬에이드
				totalPrice += cf.getLade();
				break;
			} else {
				System.out.println("다시 입력해주세요");
				continue;
			}
		} // 음료 메뉴판 while문 끝

getter, setter

getter, setter는 이번 프로젝에서 처음 사용해봤는데 배운지 얼마 안되고, 사용도 많이 안해봐서 제대로 사용한건지 잘 모르겠지만 일단 실행은 되어서 사용한 방법을 적어본다.

// 커피 메뉴, 가격
	int americano = 4000;		// 아메리카노
	int cafelatte = 5000;		// 카페라떼
	int vanilalatte = 5500;		// 바닐라라떼
	int zade = 4000;			// 자몽에이드
	int lade = 4000;			// 레몬에이드
	
	// 커피 옵션
	int isIce;					// 아이스로?
	int isTakeOut;				// 포장?
	int caffeine;				// 카페인? 디카페인?
	int shotCnt; 				// 500원
	int drinkOrder;				// 음료를 주문 할거니?
	
	// 기타 옵션
	int money; // 손님이 내는 돈
	int change; // 잔돈
	int drinkChoice; // 음료 선택

이것들은 coffee 클래스에 만들어둔 변수들이다.

// 커피류 getter
	public int getAmericano() {
		return americano;
	}
	public int getCafelatte() {
		return cafelatte;
	}
	public int getVanilalatte() {
		return vanilalatte;
	}
	public int getZade() {
		return zade;
	}
	public int getLade() {
		return lade;
	}

위에 만들어둔 변수들 중 커피 메뉴에 관련된 getter들이다.
커피 가격은 마음대로 바뀌면 안되기때문에 setter는 만들어두지 않았다.

// 옵션류 getter, setter
		
	public int isIce() {
		return isIce;
	}
	public void setIce(int isIce) {
		this.isIce = isIce;
	}
	public int isTakeOut() {
		return isTakeOut;
	}
	public void setTakeOut(int isTakeOut) {
		this.isTakeOut = isTakeOut;
	}
	public int caffeine() {
		return caffeine;
	}
	public void setCaffeine(int caffeine) {
		this.caffeine = caffeine;
	}
	public int getShotCnt() {
		return shotCnt;
	}
	public void setShotCnt(int shotCnt) {
		this.shotCnt = shotCnt;
	}
	public void option() {
		System.out.println("");
	}
	public int getChange() {
		return change;
	}
	public void setChange(int change) {
		this.change = change;
	}
	public int getDrinkChoice() {
		return drinkChoice;
	}
	public void setDrinkChoice(int drinkChoice) {
		this.drinkChoice = drinkChoice;
	}
	public int getMoney() {
		return money;
	}
	public void setMoney(int money) {
		this.money = money;
	}
	public int getDrinkOrder() {
		return drinkOrder;
	}
	public void setDrinkOrder(int drinkOrder) {
		this.drinkOrder = drinkOrder;
	}

이 getter, setter들은 기타 옵션 변수에 관련된 것들이다.

getter, setter는 Main 클래스에서 Coffee 클래스에 만들어둔 변수들에 값을 저장하거나, 저장된 값을 가져가서 사용할 수 있게 해주는 도구다.

먼저 Main 클래스에 Coffee 클래스의 객체를 생성해주고
ex) Coffee cf = new Coffee();

예를 들어 어떤 커피를 선택했는지 값을 저장하고 싶다면
cf.setDrinkChoice(저장할 값);를 이용해 값을 저장해주면 되고,

저장한 값을 불러오고 싶다면
cf.getDrinkChoice();를 이용해 불러오면 된다.

사용 예시는 위에 코드들을 보면 알 수 있다.

그리고 getter, setter는 일일이 타이핑을 하지 않아도 만들 수 있는데,
eclipse화면에서 빈공간에 마우스 우클릭 -> Source 클릭 -> Generate Getter and Setter Method's for the Type's Fields 클릭 -> getter, setter를 만들 변수 선택 -> 하단 Generate클릭.
하면 간단하게 만들 수 있다.

느낀점

일단 이번 프로젝트를 만들면서 느낀점은 아직 배울것들이 많구나 였다.
나랑 같은 학원을 먼저 다니고 수료한 친구가 있는데 이번 프로젝트에 참고가 될까 싶어서 했던 프로젝트가 있다면 보내달라고 했었다.
근데 수준 차이가 너무 나서 봐도 무슨 얘기인지를 모르겠어서 참고도 못했다. 물론 100% 전부 다 못알아본건 아니지만 친구는 switch문을 주로 사용해서 내가 설계했던거랑 친구가 설계한거랑 너무 다르고, 학원 수업 후반에 만든거라 GUI 등등 내가 아직 못배운 것들을 많이 사용해서 아직은 이해할 수 없는 것들이 더 많았다. 그래서 그냥 수준 차이만 느끼게 되었다.

또 다른사람들이 한 프로젝트를 보면서 세상엔 프로그래밍을 잘하는 사람이 많구나 라는걸 느꼈다.

개떡찰떡이라는 게임을 만들어온 사람이 있었는데 너무 아이디어도 신선하고, 새롭고, 나오는 캐릭터들도 귀엽고 실행도 너무 잘 되어서 충격이었다.

다른 잘 한 사람들도 많았지만 나는 그게 제일 충격이었다. 나도 언젠가는 내가 생각한걸 그대로 만들어 볼 수 있게 되어야지 라고 생각했다.

전체 코드가 있는 Github 주소

https://github.com/diddbsckd/Kiosk

0개의 댓글