yudonggeun / kiosk

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

kiosk 시스템 만들기

소개

내일배움캠프 개인과제로 진행한 프로젝트입니다.

과제의 요구사항은 wiki를 참고해주세요.

제가 좋아하는 버거킹의 메뉴로 구성된 키오스크 시스템을 만들었습니다.

목표 및 배운 점

1. 고객의 요구를 만족시키는 코드 작성

주어진 과제의 요구사항이 구체적이기 때문에 클라이언트의 요구사항을 만족시키는 코드를 작성하는 연습할 수 있었습니다.

2. 요구사항 변경을 수용하는 설계

키오스크의 메뉴 구성이 달라질 수 있고 UI 요구사항도 클라이언트마다 다르게 요청할 수 있겠다고 판단해서 메뉴의 구조와 UI의 변경을 수용할 수 있도록 시스템을 설계하는 방법을 연습할 수 있었습니다.

클래스 설계

Client

  • 주문을 하는 객체의 역할을 정의합니다.

Store

  • 사용자의 주문을 받아서 처리하는 역할을 상점에 비유하여 정의합니다.

Manager

  • 선택 요구사항으로 특수 명령이 입력되는 경우를 처리하기 위한 경우를 관리하기 위한 역할을 가집니다.

OrderService

  • 대기번호를 관리하는 서비스입니다.

Page

  • 키오스크에서 출력되는 화면을 정의한 클래스입니다.
  • 상황에 따라서 달라지므로 각 상황마나다 Page를 상속하는 클래스를 만들어서 책임을 분리했습니다.

State

  • 사용자의 상태 정보를 관리하는 클래스입니다.
  • 장바구니 목록, 재요청 여부, 대기 여부, 현재 위치한 메뉴 정보를 지니고 있습니다.

Menu

  • 메뉴는 다른 메뉴와 연결되어 사용자의 요구에 따라서 이동됩니다. 이러한 관계를 구현하기 위해서 process() 메서드를 가집니다.
  • 메뉴에 따라서 사용자에게 출력하는 형식이 달라집니다. 메뉴에 따라서 출력하는 형식을 지정하기 위해서 page() 메서드를 가집니다.
  • 메뉴의 기본 속성은 namedescription입니다. 이를 조회할 수 있도록 getter 메서드를 가집니다.
  • 구현체로는 BranchMenu, LeafMenu, DefaultMenu등이 존재합니다.
  • BranchMenu는 여러개의 하위 메뉴로 구성된 메뉴에 대한 골격 클래스입니다.
  • LeafMenu는 메뉴 트리에서 끝에 위치한 메뉴입니다.
  • DefaultMenu는 메뉴의 속성을 구현한 메뉴입니다.

domain 패키지

  • 상품, 상품 옵션, 매출기록, 주문, 장바구니와 관련된 기능을 구현했습니다.
  • 비즈니스 로직만을 담은 클래스입니다.

About


Languages

Language:Java 100.0%