반응형
1. 학습내용
10:00 ~ 11:00 키오스크 과제 발제 ( 박성규 튜터님 )
★ 키오스크 과제 1단계 ★
| Lv 1. 기본적인 키오스크를 프로그래밍하기 |
package com.example.kiosk;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Lv 1. 기본적인 키오스크를 프로그래밍해보자
Scanner sc = new Scanner(System.in);
// 무한 반복
while(true) {
// 메뉴판 출력
System.out.println("[ SHAKESHACK MENU ]");
System.out.println("1. ShackBurger | 6900원 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거");
System.out.println("2. SmokeShack | 8900원 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거");
System.out.println("3. Cheeseburger | 6900원 | 포테이토 번과 비브패티, 치즈가 토핑된 치즈버거");
System.out.println("4. Hamburger | 5400원 | 비프패티를 기반으로 야채가 들어간 기본버거");
System.out.println("0. 종료 | 종료");
// 입력 받기 ( 선택하기 )
int choose = sc.nextInt();
if(choose == 0) { // 0을 입력시 프로그램이 종료됨.
System.out.println("프로그램을 종료합니다.");
break;
} else if (choose == 1) {
System.out.println(" ShackBurger를 선택하였습니다. ");
break;
} else if (choose == 2) {
System.out.println(" SmokeShack을 선택하였습니다. ");
break;
} else if (choose == 3) {
System.out.println(" Cheeseburger를 선택하였습니다. ");
break;
} else if (choose == 4){
System.out.println(" Hamburger를 선택하였습니다. ");
break;
} else { // 그 외의 값을 입력시 "잘못된 선택 입니다" 메세지 출력.
System.out.println(" 잘못된 선택입니다. ");
}
}
}
}
Main 클래스
[트러블 슈팅]
- 1단계 에서는 부담없이 잘 진행되었다.
- 특정 번호가 입력된다는 가정에 의해, 프로그램이 종료되게 설계하였다.
★ 키오스크 과제 2단계 ★
| Lv 2. 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리하기 |
package com.example.kiosk;
public class MenuItem {
// 속성
String name;
int price;
String explain;
// 생성자
public MenuItem(String name, int price, String explain) {
this.name = name;
this.price = price;
this.explain = explain;
}
}
MenuItem 클래스
package com.example.kiosk;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Lv 2. 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리하기
// List 컬렉션 선언
List<MenuItem> menuItems = new ArrayList<>();
// add함수로 new MenuItem(이름,가격,설명) List에 삽입
menuItems.add(new MenuItem("ShackBurger", 6900 ,"토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
menuItems.add(new MenuItem("SmokeShack", 8900 ,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
menuItems.add(new MenuItem("Cheeseburger", 6900 ,"포테이토 번과 비브패티, 치즈가 토핑된 치즈버거"));
menuItems.add(new MenuItem("Hamburger", 5400 ,"비프패티를 기반으로 야채가 들어간 기본버거"));
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("[ SHAKESHACK MENU ]");
for(int i=0; i<menuItems.size(); i++) {
MenuItem item = menuItems.get(i); // 한 객체의 값을 직접 집어넣어주어야 하는데 캡슐화 하면 ?..
System.out.println(i+1 + ". " + item.name + " | " + item.price + "원 | " + item.explain);
}
System.out.println("0. 종료 | 종료");
int choose = sc.nextInt();
if(choose == 0) {
System.out.println("프로그램을 종료합니다.");
break;
} else if (choose >= 1 && choose <= 4) {
MenuItem item = menuItems.get(choose - 1); // 인덱스는 0부터 시작하기 때문에 -1을 해야함.
System.out.println(item.name + "를 선택하였습니다.");
break;
} else {
System.out.println(" 잘못된 선택입니다. ");
}
}
}
}
Main 클래스
[트러블 슈팅]
- 배경 : menuItems으로 메뉴를 저장하였더니 출력하니 객체 주소값이 출력되는 현상 발견.
- 발단 : 반복문을 통해서 그대로 menuitems.get(i) 로 출력을 하면 주소값이 나온다는 값을 인지했다. 그래서 다른 방법으로 어떻게 주소값이 안나오고, 원하는 값이 나올지 방법을 찾아보았다.
- 전개 : 해결하던 와중에 MenuItem 타입으로 지역변수를 다시 주는 방법은 어떨까 라는 생각에 반복분 내에서 menuItem.get(i)로 각각 객체들을 지역변수에 담아서 그 지역변수가 객체.필드명 을 사용할수 있는지 시도 해보았다.
- 위기 : 나중에 캡슐화가 진행될때 필드명으로 선언되면 사용할수 가 없는 문제점이 있을거라는 미래를 예측했다. 그래서 튜터님 한테 찾아가 이 상황에 대해서 설명을 하였다.
- 절정 : 캡슐화가 되면 해당 되는 부분은 사용이 안되는것이 맞다고 하였으며, 클래스 내에서 showInfo() 함수로 담아서 출력하는 방법이라던지 toString으로 오버라이딩 하는 방법을 한다던지 여러 방법을 제공 해주셨다.
- 결말 : 객체 주소값이 출력되지 않게 해결 할수 있었고, 추후 캡슐화가 된다면 추후 위의 방법대로 진행해보아야 겠다.
2. 내일 학습 할 것: 주말동안 CS지식 정리 , 백준 알고리즘, 키오스크 과제 github정리
반응형
'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글
| TIL 16 [ 키오스크 과제 5단계 , Java (Enum, 동일성 vs 동등성) ] (0) | 2025.03.11 |
|---|---|
| TIL 15 [ 키오스크 과제(3~4단계) ] (0) | 2025.03.10 |
| TIL 13 [ Java(동일성 문제, 클래스와 객체, charAt함수) ] (0) | 2025.03.06 |
| TIL 12 [계산기 과제 3단계(enum, 제네릭, 람다, 스트림)] (0) | 2025.03.05 |
| TIL 11 [Java(접근제어자, 클래스란?, 객체지향?) + 계산기 과제 2단계 ] (0) | 2025.03.04 |