- 요구사항 1. kitchenpos 패키지의 코드를 보고 키친포스의 요구 사항을 README.md에 작성한다.
- 요구사항 2. 정리한 키친포스의 요구 사항을 토대로 테스트 코드를 작성한다. 모든 Business Object에 대한 테스트 코드를 작성한다. @SpringBootTest를 이용한 통합 테스트 코드 또는 @ExtendWith(MockitoExtension.class)를 이용한 단위 테스트 코드를 작성한다.
- 단위 테스트하기 어려운 코드와 단위 테스트 가능한 코드를 분리해 단위 테스트 가능한 코드에 대해 단위 테스트를 구현한다.
객체지향 생활 체조 원칙
한 메서드에 오직 한 단계의 들여쓰기만 한다.
else 예약어를 쓰지 않는다.
모든 원시 값과 문자열을 포장한다.
한 줄에 점을 하나만 찍는다.
줄여 쓰지 않는다(축약 금지).
모든 엔티티를 작게 유지한다.
3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
일급 컬렉션을 쓴다.
getter/setter/프로퍼티를 쓰지 않는다.
- 상품을 등록할 수 있다.
- 상품 이름과 가격을 입력해 상품을 등록한다.
- 가격이 0보다 작거나 null일 수 없다.
- 상품 목록을 조회할 수 있다.
- 메뉴 그룹을 등록할 수 있다.
- 메뉴 그룹 이름을 입력해 메뉴그룹을 등록한다.
- 메뉴 그룹 목록을 조회할 수 있다.
- 메뉴를 등록할 수 있다.
- 메뉴의 이름과 가격, 메뉴 그룹과 메뉴 상품 목록을 입력해 등록할 수 있다.
- 가격은 null과 0보다 작을 수 없다.
- 등록되지 않은 메뉴 그룹을 입력할 수 없다.
- 메뉴는 특정 메뉴 그룹에 속해있어야 한다.
- 단품의 합이 메뉴 가격보다 커야 한다.
- 메뉴 목록을 조회할 수 있다.
- 테이블을 등록할 수 있다.
- 모든 테이블의 목록을 조회할 수 있다.
- 테이블 상태를 설정할 수 있다.
- 비어있는지, 손님이 있는지 설정 가능.
- 주문 상태가 조리 또는 식사인 주문 테이블은 빈 테이블 설정 또는 해지할 수 없다.
- 손님 수를 입력할 수 있다.
- 손님 수는 0명 이상만 입력할 수 있다.
- 테이블이 비어있으면 손님을 입력할 수 없다.
- 단체 지정 테이블을 등록할 수 있다.
- 테이블이 2개 이상인 경우에만 등록할 수 있다.
- 빈 테이블만 등록이 가능하다.
- 단체 지정 테이블을 해지할 수 있다.
- 주문 상태가 요리중이거나 식사인 경우에는 해지할 수 없다.
- 주문을 등록할 수 있다.
- 주문 항목이 1개 이상일때만 등록할 수 있다.
- 빈 테이블이면 등록할 수 있다.
- 등록되어 있지 않은 메뉴가 하나라도 있다면 주문을 할 수가 없다.
- 주문 리스트를 조회할 수 있다.
- 주문 상태를 변경할 수 있다.
- 계산이 된 테이블을 주문 상태를 변경할 수 없다.
한글명 | 영문명 | 설명 |
---|---|---|
상품 | product | 메뉴를 관리하는 기준이 되는 데이터 |
메뉴 그룹 | menu group | 메뉴 묶음, 분류 |
메뉴 | menu | 메뉴 그룹에 속하는 실제 주문 가능 단위 |
메뉴 상품 | menu product | 메뉴에 속하는 수량이 있는 상품 |
금액 | amount | 가격 * 수량 |
주문 테이블 | order table | 매장에서 주문이 발생하는 영역 |
빈 테이블 | empty table | 주문을 등록할 수 없는 주문 테이블 |
주문 | order | 매장에서 발생하는 주문 |
주문 상태 | order status | 주문은 조리 ➜ 식사 ➜ 계산 완료 순서로 진행된다. |
방문한 손님 수 | number of guests | 필수 사항은 아니며 주문은 0명으로 등록할 수 있다. |
단체 지정 | table group | 통합 계산을 위해 개별 주문 테이블을 그룹화하는 기능 |
주문 항목 | order line item | 주문에 속하는 수량이 있는 메뉴 |
매장 식사 | eat in | 포장하지 않고 매장에서 식사하는 것 |