⭕ Java 키오스크 프로젝트

이동근·2025년 4월 28일

Mini Project

목록 보기
2/8
post-thumbnail

코드확인 -> github 링크

🎩 키오스크 프로젝트 (KioskProject)



✅ 프로젝트 요구사항

[LV1️⃣] 기본적인 키스오스크 프로그래밍

🎈 입력처리(Scanner)와 간단한 흐름 제어(조건문, 반복문)

🎈 햄버거 메뉴 출력 및 선택



[LV2️⃣] 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리하기

🎈 햄버거 메뉴를 MenuItem , List를 통해 관리

📍 개별 음식 항목을 관리하는 클래스 , 필드 : 이름, 가격, 설명


[LV3️⃣] 객체 지향 설계를 적용해 순서 제어를 클래스로 관리하기

🎈 main 함수에서 관리하던 전체 순서 제어를 Kiosk 클래스를 통해 관리

🎈 Kiosk클래스 생성

📍 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스
📍 MenuItem을 관리하는 리스트가 필드로 존재
📍 start 메서드를 생성하여 반복문 로직을 관리
📍 List<MenuItem> menuItems는 Kiosk 클래스 생성자를 통해 값을 할당
🍭 Kiosk 객체를 생성하고 사용하는 main 함수에서 객체를 생성할 때 값을 넘겨줌

🎈 0을 입력하면 프로그램이 뒤로가기, 종료 되도록 설계



[LV4️⃣] 객체 지향 설계를 적용해 음식 메뉴와 주문 내역을 클래스 기반으로 관리하기

🎈 Menu 클래스 생성 -> (CategoryMenu)

📍 MenuItem 클래스를 관리하는 클래스 (HamburgerMenu, BeverageMenu)
📍 ex) 버거메뉴, 음료메뉴 등 각 카테고리 내에 여러 MenuItem을 포함
📍 상위 개념의 카테고리 이름 필드 사용
📍 메뉴 카테고리 이름을 반환하는 메서드 구현


[LV5️⃣] 캡슐화 적용하기

🎈 캡슐화 적용하기

📍 MenuItem, Menu, Kiosk 클래스의 필드에 직접 접근하지 못하도록 설정


[LV6️⃣] 장바구니 및 구매하기 기능 추가하기

🎈 장바구니 생성 및 관리 기능

📍 사용자가 선택한 메뉴를 장바구니에 추가할 수 있는 기능 제공
📍 메뉴명, 수량, 가격 정보를 저장하며, 항목을 동적으로 추가 및 조회

🎈 장바구니 출력 및 금액 계산

📍 각 메뉴의 이름, 가격, 수량
📍 총 금액 합계

🎈 주문기능

📍 장바구니에 담긴 모든 항목 출력
📍 합산하여 총 금액 계산 후, "주문하기" 누르면 장바구니를 초기화


[LV7️⃣] Enum , 람다 & 스트림을 활용한 주문 및 장바구니 관리

🎈 Enum을 활용한 사용자 유형별 할인율 관리

📍 사용자 유형의 Enum 정의 및 각 사용자 유형에 따른 할인율 적용
🍭 ex) 군인, 학생, 일반인 등
📍 주문 시, 사용자 유형에 맞는 할인율 적용해 총 금액 계산

🎈 람다 & 스트림을 활용한 장바구니 조회 가능

📍 기존에 생성한 Menu의 MenuItem을 조회할 때 스트림을 사용하여 출력하도록 수정
📍 기존 장바구니에 특정 메뉴 빼기 기능을 통한 스트림 활용


💫 트러블 슈팅

진행 과정

  • 원격 Repository <-> 로컬 Repository 연결 시 README 파일이 존재할 경우
  • 강제 병합 코드: git pull origin main --allow-unrelated-histories 사용
  • Repository를 서로 독립적으로 만들었기 때문에 문제 발생

LV 4️⃣

문제 :

  • Category 리스트를 어떻게 가지고 와서 사용해야할지 의문

  • 카데고리에서 어떤 메뉴를 선택하더라도 메뉴를 출력할 수 있도록 해야하는 동적인 코드를 어떻게 짜야할지 의문

해결 :

  • 리스트 안에 리스트가 존재하는 리스트도 객체이기 때문에 get메서드를 사용해서 객체를 불러오고 그 객체안에 값들 또한 객체이므로 get메서드를 사용함

  • 동적인 코드를 짜기 위해서 인터페이스를 사용 -> 인터페이스 공통 기능을 구헌하는 역할

    • 메뉴들을 인터페이스 상속 시키고 카테고리 메뉴에 들어갈 객체의 리스트 타입은 인터페이스를 상속하는 클래스로 설정

LV 6️⃣

문제 :

  • 선택한 메뉴를 어떻게 장바구니 안에 넣을 것인가?

해결 :

  • kiosk 안에서 해결해야하는 문제이기 때문에, 장바구니 객체를 생성하고 장바구니 타입의 리스트를 생성하여 키오스크 안에서 적용 되도록 설계

    • 메뉴는 어떤 메뉴를 선택할지 모르기 때문에 공통타입으로 설정

    • 메뉴를 장바구니 객체 생성 시 매개변수로 사용 -> 장바구니 타입의 리스트 안에 넣기 위해

    • 장바구니 타입의 객체장바구니 타입의 리스트에 추가

LV 7️⃣

문제 :

  • 스트림 사용이 익숙하지 않음

해결 :

  • 스트림을 좀 더 학습하고 해결, 리스트 안의 값을 간단하게 처리하는 방법으로 처리

  • 모든 스트림을 chatgpt를 사용하지 않았지만 일부 사용하여 개인적으로 아쉬움..

profile
안녕하세요

0개의 댓글