내일배움캠프(Spring 7기)/CH 2 키오스크 과제

요구사항 정의

가지코딩 2025. 4. 29. 18:01

필수 기능

  • Lv 1. 기본적인 키오스크를 프로그래밍해보자
  • Lv 2. 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리하기
  • Lv 3. 객체 지향 설계를 적용해 순서 제어를 클래스로 관리하기
  • Lv 4. 객체 지향 설계를 적용해 음식 메뉴와 주문 내역을 클래스 기반으로 관리하기
  • Lv 5. 캡슐화 적용하기


도전 기능

  • Lv 1. 장바구니 및 구매하기 기능을 추가하기
  • Lv 2. Enum, 람다 & 스트림을 활용한 주문 및 장바구니 관리 

 

필수 기능

 

Lv 1. 기본적인 키오스크를 프로그래밍해보자

학습 목표

  • 입력 처리와 간단한 흐름 제어 복습
  • Scanner 활용법, 조건문, 반복문을 재확인하며 입력 데이터를 처리하는 방법 강화

요구사항 정의

  • 햄버거 메뉴 출력 및 선택하기
    • 햄버거 메뉴를 출력
      • print 문을 사용하여, 햄버거 메뉴를 terminal 에 출력
    • 선택한 메뉴 입력
      • Scanner 를 사용하여, 숫자를 입력 받음
      • 입력받은 숫자에 따라 다른 로직을 실행 → if문 또는 switch-case 문 사용
    • 반복
      • 메뉴 출력 → 입력 → 결과 반복
      • 0 입력 시 프로그램 종료
      • 0과 메뉴번호 외 다른 값 입력 시 예외처리

Lv 2. 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리하기

학습 목표

  • 객체 지향 개념을 학습하고, 데이터를 구조적으로 관리하며 프로그램을 설계하는 방법을 익힌다.
  • 햄버거 메뉴를 MenuItem 클래스와 List를 통해 관리한다.

 

요구사항 정의

  • MenuItem 클래스 생성
    • 메뉴 항목을 관리하는 클래스
    • 속성
      • name: 음식명
      • price: 음식 가격
      • description: 음식 설명
    • 생성자
      • 인스턴스 생성시 속성(name, price, description) 값을 할당한다.
    • 기능
      • 음식 정보를 가져오는 게터
  • main 함수에서 MenuItem 클래스를 활용하여 메뉴를 출력한다.
    • main 함수에서 MenuItem 클래스의 인스턴스 생성
    • 게터, 세터를 통해 값을 저장하고, 가져온다.
  • main 함수에서 List를 선언하여 여러 MenuItem 을 추가한다.

Lv 3. 객체 지향 설계를 적용해 순서 제어를 클래스로 관리하기

학습 목표

  • 객체 지향 개념을 학습하고, 데이터를 구조적으로 관리하며 프로그램을 설계하는 방법을 익힌다.
  • main 함수에서 관리하던 전체 순서 제어를 Kiosk 클래스를 통해 관리한다.

 

요구사항 정의

  • Kiosk 클래스 생성
    • 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스
    • 속성
      • List<MenuItem> menuItems: menuItem 리스트
    •  생성자
      • menuItems 값을 할당한다.
    • 기능: start()
      • main 함수에서 관리하던 입력과 반복문 로직을 start() 메서드에서 관리한다.

Lv 4. 객체 지향 설계를 적용해 음식 메뉴와 주문 내역을 클래스 기반으로 관리하기

요구사항 정의

  • Menu 클래스 생성
    • MenuItem 클래스를 관리하는 클래스
    • ex. 버거 메뉴, 음료 메뉴 등 카테고리 내 여러 MenuItem 포함
    • 속성
      • name: 카테고리명
      • List<MenuItem> menuItems: menuItem 리스트
    • 생성자
      • 카테고리와 카테고리 내 음식 리스트 값을 할당한다.
    • 기능
      • 메뉴 카테고리 이름을 반환하는 메서드 구현

Lv 5. 캡슐화 적용하기

요구사항 정의

  • MenuItem, Menu 그리고 Kiosk 클래스의 필드에 직접 접근하지 못하도록 설정
    • 속성에 접근 제어자 설정 - private
  • Getter와 Setter 메서드를 사용해 데이터 관리
    • 필요한 게터, 세터 메서드 생성

도전 기능

(간략하게 ... )

Lv 1. 장바구니 및 구매하기 기능을 추가하기

학습 목표

  • 클래스 간 역할 분리를 이해하고, 적절히 협력하는 객체를 설계
  • 프로그램 상태 변경 및 데이터 저장을 연습
  • 사용자 입력에 따른 예외 처리와 조건 분기를 연습

 

요구사항 정의

  • 장바구니 생성 및 관리 기능
    • 메뉴명, 수량, 가격 정보를 저장
    • 항목을 동적으로 추가 및 조회할 수 있도록 함
  • 장바구니 담기 기능
    • 메뉴를 클릭하면 장바구니에 추가할 지 물어보고, 입력값에 따라 “추가”, “취소” 처리
  • 주문 기능
    • 결제 전, 장바구니에 담긴 모든 메뉴와 총 금액을 출력
    • 총 금액을 계산하고, “주문하기”를 누르면 장바구니를 초기화

Lv 1. Enum, 람다 & 스트림을 활용한 주문 및 장바구니 관리

학습 목표

  • Enum을 통해 상수를 안전하게 관리하고, 프로그램 구조를 간결하게
  • 스트림 API를 사용하여 데이터를 필터링하고, 간결한 코드로 동작을 구현

 

요구사항 정의

  • Enum을 활용한 사용자 유형별 할인율 관리하기
    • 사용자 유형의 Enum 정의 및 각 사용자 유형에 따른 할인율 적용
  • 람다 & 스트림을 활용한 장바구니 조회 기능
    • 기존에 생성한 Menu의 MenuItem을 조회 할 때 스트림을 사용하여 출력하도록 수정
    • 기존 장바구니에서 특정 메뉴 빼기 기능을 통한 스트림 활용