내일배움캠프 개인과제로 진행한 프로젝트입니다.
과제의 요구사항은 wiki를 참고해주세요.
제가 좋아하는 버거킹의 메뉴로 구성된 키오스크 시스템을 만들었습니다.
주어진 과제의 요구사항이 구체적이기 때문에 클라이언트의 요구사항을 만족시키는 코드를 작성하는 연습할 수 있었습니다.
키오스크의 메뉴 구성이 달라질 수 있고 UI 요구사항도 클라이언트마다 다르게 요청할 수 있겠다고 판단해서 메뉴의 구조와 UI의 변경을 수용할 수 있도록 시스템을 설계하는 방법을 연습할 수 있었습니다.
- 주문을 하는 객체의 역할을 정의합니다.
- 사용자의 주문을 받아서 처리하는 역할을 상점에 비유하여 정의합니다.
- 선택 요구사항으로 특수 명령이 입력되는 경우를 처리하기 위한 경우를 관리하기 위한 역할을 가집니다.
- 대기번호를 관리하는 서비스입니다.
- 키오스크에서 출력되는 화면을 정의한 클래스입니다.
- 상황에 따라서 달라지므로 각 상황마나다
Page
를 상속하는 클래스를 만들어서 책임을 분리했습니다.
- 사용자의 상태 정보를 관리하는 클래스입니다.
- 장바구니 목록, 재요청 여부, 대기 여부, 현재 위치한 메뉴 정보를 지니고 있습니다.
- 메뉴는 다른 메뉴와 연결되어 사용자의 요구에 따라서 이동됩니다. 이러한 관계를 구현하기 위해서
process()
메서드를 가집니다. - 메뉴에 따라서 사용자에게 출력하는 형식이 달라집니다. 메뉴에 따라서 출력하는 형식을 지정하기 위해서
page()
메서드를 가집니다. - 메뉴의 기본 속성은
name
과description
입니다. 이를 조회할 수 있도록getter
메서드를 가집니다. - 구현체로는
BranchMenu
,LeafMenu
,DefaultMenu
등이 존재합니다. BranchMenu
는 여러개의 하위 메뉴로 구성된 메뉴에 대한 골격 클래스입니다.LeafMenu
는 메뉴 트리에서 끝에 위치한 메뉴입니다.DefaultMenu
는 메뉴의 속성을 구현한 메뉴입니다.
- 상품, 상품 옵션, 매출기록, 주문, 장바구니와 관련된 기능을 구현했습니다.
- 비즈니스 로직만을 담은 클래스입니다.