[Java] 키오스크 장바구니 및 구매하기 기능을 추가하기
adding cart function to kiosk
[Java] 키오스크 장바구니 및 구매하기 기능을 추가하기
오늘 키오스크라는 실습과제에 Cart.java 클래스를 새로 추가봤습니다. 이 클래스는 장바구니 역할을 수행하며 사용자가 선택한 메뉴 아이템들을 저장하고 총액을 계산하거나 목록을 초기화할 수 있습니다. 단순한 기능처럼 보이지만 구현하면서 꽤 많은 생각과 수정이 필요했습니다.
Cart.java는 어떤 일을 하나요?
- 사용자가 선택한 MenuItem을 리스트에 저장합니다.
- 항목들을 출력해 보여주고 총 가격을 계산합니다.
- 장바구니를 초기화하거나 추후 삭제 기능도 추가할 예정입니다.
😄 가장 피곤했던 부분
새 기능을 추가할 때마다 Kiosk.java 클래스의 흐름과 로직을 자꾸 수정해야 한다는 점이 반복적으로 시간을 많이 잡아먹습니다. 장바구니 추가, 확인 버튼, 취소 로직 등 새로운 기능이 생길 때마다 Kiosk가 점점 더 복잡해지고 있어요.
Main.java
1
2
3
4
5
6
public class Main {
public static void main(String[] args) {
Kiosk kiosk = new Kiosk();
kiosk.start();
}
}
Kiosk.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class Kiosk {
private final Cart cart = new Cart();
public void start() {
Scanner input = new Scanner(System.in);
List<Menu> menus = Menu.getMenus();
while (true) {
System.out.println("[ MAIN MENU ]");
for (int i = 0; i < menus.size(); i++) {
System.out.println((i + 1) + ". " + menus.get(i).getName());
}
System.out.println("0. 종료 | 종료");
try {
int choice = input.nextInt();
if (choice == 0) {
System.out.println("프로그램을 종료합니다.");
System.exit(0);
}
if (choice > 0 && choice <= menus.size()) {
Menu selectedMenu = menus.get(choice - 1);
List<MenuItem> items = selectedMenu.getMenuItems();
while (true) {
System.out.println("[ " + selectedMenu.getName() + " MENU ]");
for (int i = 0; i < items.size(); i++) {
System.out.println((i + 1) + "." + items.get(i));
}
System.out.println("0. 돌아가기");
int itemChoice = input.nextInt();
if (itemChoice == 0) {
break;
}
MenuItem selectedItem = items.get(itemChoice - 1);
if (itemChoice > 0 && itemChoice <= items.size()) {
System.out.println("선택된 메뉴: " + selectedItem.getName());
} else {
System.out.println("잘못된 입력입니다");
}
System.out.println(selectedItem.getName());
System.out.println("1. 확인 2. 취소");
int itemCheck = input.nextInt();
if (itemCheck == 1) {
cart.add(selectedItem);
System.out.println(selectedItem + "이 장바구니에 추가되었습니다.");
} else {
if (itemCheck == 0) {
break;
}
}
}
}
else {
System.out.println("잘못된 입력입니다");
}
} catch (Exception e) {
System.out.println("숫자를 입력해 주세요. (" + e.getMessage() + ")");
input.nextLine();
}
}
}
}
MenuItem.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class MenuItem {
private final String name;
private double price;
private String description;
public MenuItem(String name, double price, String description) {
this.name = name;
this.price = price;
this.description = description;
}
@Override
public String toString() {
return String.format(" %-14s | W %.1f | %s", name, price, description);
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public String getDescription() {
return description;
}
public void setPrice(double price) {
this.price = price;
}
public void setDescription(String description) {
this.description = description;
}
}
Menu.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class Menu {
private final String name;
private final List<MenuItem> menuItems;
public Menu(String name) {
this.name = name;
this.menuItems = new ArrayList<>();
}
public void add(MenuItem menuItem) {
menuItems.add(menuItem);
}
public String getName() {
return name;
}
public List<MenuItem> getMenuItems() {
return menuItems;
}
public static List<Menu> getMenus() {
List<Menu> category = new ArrayList<>();
Menu burgerMenu = new Menu("BURGERS");
burgerMenu.add(new MenuItem("ShackBurger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
burgerMenu.add(new MenuItem("SmokeShack",8.9,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
burgerMenu.add(new MenuItem("Cheeseburger",6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"));
burgerMenu.add(new MenuItem("Hamburger", 5.4,"비프패티를 기반으로 야채가 들어간 기본버거"));
Menu drinkMenu = new Menu("DRINKS");
drinkMenu.add(new MenuItem("Cola", 2.0, "캔"));
Menu dessertMenu = new Menu("DESSERT");
dessertMenu.add(new MenuItem("CupCake", 5.5, "크림치즈, 블루베리"));
category.add(burgerMenu);
category.add(drinkMenu);
category.add(dessertMenu);
return category;
}
}
Cart.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Cart {
private final List<MenuItem> items = new ArrayList<>();
public void add(MenuItem item){
items.add(item);
}
public void show() {
for (MenuItem item : items) {
System.out.println("- " + item.getName() + "| W" + item.getPrice());
}
System.out.printf("W %.1f\n", getTotal());
}
public double getTotal() {
double total = 0;
for (MenuItem item : items) {
total += item.getPrice();
}
return total;
}
public void clear() {
items.clear();
}
}
실행 결과
아직 진행 중
아직 끝난 게 아닙니다. 앞으로는 장바구니 확인, 주문 확정, 주문 내역 저장 기능까지 제대로 동작하는 게 목표입니다. 이 과정을 통해 객체 지향 설계와 캡슐화 원칙을 더 잘 이해하게 되는 중입니다. 코드만 보면 간단해 보일 수 있지만 실제로 구현하면 생각할 게 정말 많아요!
This post is licensed under CC BY 4.0 by the author.



