- 편의점 저장소 생성으로 시작
- README.md에 구현할 기능 목록 정리
- Git 커밋은 기능 목록 단위로 추가
- AngularJS Git Commit Message Conventions 참고
- 프리코스 진행 가이드 문서 참고
- 구매자 할인 혜택과 재고 상황 고려한 최종 결제 금액 계산
- 상품 가격과 수량 기반 결제 금액 계산
- 프로모션 및 멤버십 할인 정책 반영
- 영수증 출력
- 추가 구매 또는 종료 선택 기능
- 잘못된 입력값에 대한 예외처리 (IllegalArgumentException)
- 재고 수량 기반 결제 가능 여부 확인
- 결제 시 재고 차감
- 실시간 재고 상태 유지 및 제공
- 프로모션 기간 내 할인 적용
- N+1 프로모션 적용 (1+1 또는 2+1)
- 단일 상품에 대한 프로모션 중복 적용 불가
- 프로모션 재고 내에서만 혜택 적용
- 프로모션 재고 우선 차감
- 추가 구매 가능 안내
- 일반 가격 결제 안내
- 프로모션 미적용 금액의 30% 할인
- 프로모션 적용 후 잔액에 대해 할인
- 최대 할인 한도 8,000원
- 구매 내역과 할인 요약 출력
- 포함 항목:
- 구매 상품 내역 (상품명, 수량, 가격)
- 증정 상품 내역
- 금액 정보
- 총구매액
- 행사할인
- 멤버십할인
- 내실돈
-
파일 입출력
- products.md
- promotions.md
-
사용자 입력
- 상품과 수량 ([상품명-수량] 형식)
- 프로모션 추가 구매 여부 (Y/N)
- 정가 결제 여부 (Y/N)
- 멤버십 할인 적용 여부 (Y/N)
- 추가 구매 여부 (Y/N)
-
상품 정보 안내
- 상품명, 가격, 프로모션, 재고
-
에러 메시지
- "[ERROR]" 접두어
- 상황별 구체적 안내
-
영수증
- 구매 내역
- 증정 내역
- 금액 정보
- JDK 21 사용
- Application의 main()에서 시작
- 외부 라이브러리 사용 금지
- System.exit() 사용 금지
- 파일/패키지 구조 유지
- Java Style Guide 준수
-
구조적 제약
- indent depth ≤ 2
- 3항 연산자 사용 금지
- else 예약어 사용 금지
- switch/case 사용 금지
- 함수 길이 ≤ 10라인
-
설계 원칙
- 단일 책임 원칙 준수
- Java Enum 활용
- 입출력 클래스 분리
-
테스트
- JUnit 5와 AssertJ 사용
- UI 로직 제외 단위 테스트 작성
- camp.nextstep.edu.missionutils
- DateTimes.now() 사용
- Console.readLine() 사용