아래 질문에 대한 최종 회고를 진행하고 소감에 구체적인 결과를 작성한다. 소감은 텍스트로 작성해야 하며 외부 링크는 허용하지 않는다.
java -version
을 실행하여 Java 버전이 21인지 확인한다. Eclipse 또는 IntelliJ IDEA와 같은 IDE에서 Java 21로 실행되는지 확인한다../gradlew clean test
명령을 실행하고, Windows 사용자의 경우 gradlew.bat clean test
또는 .\gradlew.bat clean test
명령을 실행할 때 모든 테스트가 아래와 같이 통과하는지 확인한다.BUILD SUCCESSFUL in 0s
README.md
에 구현할 기능 목록을 정리해 추가한다.README.md
에 정리한 기능 목록 단위로 추가한다.구매자의 할인 혜택과 재고 상황을 고려하여 최종 결제 금액을 계산하고 안내하는 결제 시스템을 구현한다.
IllegalArgumentException
를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 그 부분부터 입력을 다시 받는다.Exception
이 아닌 IllegalArgumentException
, IllegalStateException
등과 같은 명확한 유형을 처리한다.src/main/resources/products.md
과 src/main/resources/promotions.md
파일을 이용한다.[콜라-10],[사이다-3]
Y
Y
Y
Y
재고 없음
을 출력한다.안녕하세요. W편의점입니다.
현재 보유하고 있는 상품입니다.
- 콜라 1,000원 10개 탄산2+1
- 콜라 1,000원 10개
- 사이다 1,000원 8개 탄산2+1
- 사이다 1,000원 7개
- 오렌지주스 1,800원 9개 MD추천상품
- 오렌지주스 1,800원 재고 없음
- 탄산수 1,200원 5개 탄산2+1
- 탄산수 1,200원 재고 없음
- 물 500원 10개
- 비타민워터 1,500원 6개
- 감자칩 1,500원 5개 반짝할인
- 감자칩 1,500원 5개
- 초코바 1,200원 5개 MD추천상품
- 초코바 1,200원 5개
- 에너지바 2,000원 5개
- 정식도시락 6,400원 8개
- 컵라면 1,700원 1개 MD추천상품
- 컵라면 1,700원 10개
구매하실 상품명과 수량을 입력해 주세요. (예: [사이다-2],[감자칩-1])
현재 {상품명}은(는) 1개를 무료로 더 받을 수 있습니다. 추가하시겠습니까? (Y/N)
현재 {상품명} {수량}개는 프로모션 할인이 적용되지 않습니다. 그래도 구매하시겠습니까? (Y/N)
멤버십 할인을 받으시겠습니까? (Y/N)
===========W 편의점=============
상품명 수량 금액
콜라 3 3,000
에너지바 5 10,000
===========증 정=============
콜라 1
==============================
총구매액 8 13,000
행사할인 -1,000
멤버십할인 -3,000
내실돈 9,000
감사합니다. 구매하고 싶은 다른 상품이 있나요? (Y/N)
[ERROR] 올바르지 않은 형식으로 입력했습니다. 다시 입력해 주세요.
[ERROR] 존재하지 않는 상품입니다. 다시 입력해 주세요.
[ERROR] 재고 수량을 초과하여 구매할 수 없습니다. 다시 입력해 주세요.
[ERROR] 잘못된 입력입니다. 다시 입력해 주세요.
안녕하세요. W편의점입니다.
현재 보유하고 있는 상품입니다.
- 콜라 1,000원 10개 탄산2+1
- 콜라 1,000원 10개
- 사이다 1,000원 8개 탄산2+1
- 사이다 1,000원 7개
- 오렌지주스 1,800원 9개 MD추천상품
- 오렌지주스 1,800원 재고 없음
- 탄산수 1,200원 5개 탄산2+1
- 탄산수 1,200원 재고 없음
- 물 500원 10개
- 비타민워터 1,500원 6개
- 감자칩 1,500원 5개 반짝할인
- 감자칩 1,500원 5개
- 초코바 1,200원 5개 MD추천상품
- 초코바 1,200원 5개
- 에너지바 2,000원 5개
- 정식도시락 6,400원 8개
- 컵라면 1,700원 1개 MD추천상품
- 컵라면 1,700원 10개
구매하실 상품명과 수량을 입력해 주세요. (예: [사이다-2],[감자칩-1])
[콜라-3],[에너지바-5]
멤버십 할인을 받으시겠습니까? (Y/N)
Y
===========W 편의점=============
상품명 수량 금액
콜라 3 3,000
에너지바 5 10,000
===========증 정=============
콜라 1
==============================
총구매액 8 13,000
행사할인 -1,000
멤버십할인 -3,000
내실돈 9,000
감사합니다. 구매하고 싶은 다른 상품이 있나요? (Y/N)
Y
안녕하세요. W편의점입니다.
현재 보유하고 있는 상품입니다.
- 콜라 1,000원 7개 탄산2+1
- 콜라 1,000원 10개
- 사이다 1,000원 8개 탄산2+1
- 사이다 1,000원 7개
- 오렌지주스 1,800원 9개 MD추천상품
- 오렌지주스 1,800원 재고 없음
- 탄산수 1,200원 5개 탄산2+1
- 탄산수 1,200원 재고 없음
- 물 500원 10개
- 비타민워터 1,500원 6개
- 감자칩 1,500원 5개 반짝할인
- 감자칩 1,500원 5개
- 초코바 1,200원 5개 MD추천상품
- 초코바 1,200원 5개
- 에너지바 2,000원 재고 없음
- 정식도시락 6,400원 8개
- 컵라면 1,700원 1개 MD추천상품
- 컵라면 1,700원 10개
구매하실 상품명과 수량을 입력해 주세요. (예: [사이다-2],[감자칩-1])
[콜라-10]
현재 콜라 4개는 프로모션 할인이 적용되지 않습니다. 그래도 구매하시겠습니까? (Y/N)
Y
멤버십 할인을 받으시겠습니까? (Y/N)
N
===========W 편의점=============
상품명 수량 금액
콜라 10 10,000
===========증 정=============
콜라 2
==============================
총구매액 10 10,000
행사할인 -2,000
멤버십할인 -0
내실돈 8,000
감사합니다. 구매하고 싶은 다른 상품이 있나요? (Y/N)
Y
안녕하세요. W편의점입니다.
현재 보유하고 있는 상품입니다.
- 콜라 1,000원 재고 없음 탄산2+1
- 콜라 1,000원 7개
- 사이다 1,000원 8개 탄산2+1
- 사이다 1,000원 7개
- 오렌지주스 1,800원 9개 MD추천상품
- 오렌지주스 1,800원 재고 없음
- 탄산수 1,200원 5개 탄산2+1
- 탄산수 1,200원 재고 없음
- 물 500원 10개
- 비타민워터 1,500원 6개
- 감자칩 1,500원 5개 반짝할인
- 감자칩 1,500원 5개
- 초코바 1,200원 5개 MD추천상품
- 초코바 1,200원 5개
- 에너지바 2,000원 재고 없음
- 정식도시락 6,400원 8개
- 컵라면 1,700원 1개 MD추천상품
- 컵라면 1,700원 10개
구매하실 상품명과 수량을 입력해 주세요. (예: [사이다-2],[감자칩-1])
[오렌지주스-1]
현재 오렌지주스은(는) 1개를 무료로 더 받을 수 있습니다. 추가하시겠습니까? (Y/N)
Y
멤버십 할인을 받으시겠습니까? (Y/N)
Y
===========W 편의점=============
상품명 수량 금액
오렌지주스 2 3,600
===========증 정=============
오렌지주스 1
==============================
총구매액 2 3,600
행사할인 -1,800
멤버십할인 -0
내실돈 1,800
감사합니다. 구매하고 싶은 다른 상품이 있나요? (Y/N)
N
Application
의 main()
이다.build.gradle
파일은 변경할 수 없으며, 제공된 라이브러리 이외의 외부 라이브러리는 사용하지 않는다.System.exit()
를 호출하지 않는다.InputView
, OutputView
클래스를 참고하여 입출력 클래스를 구현한다.public class InputView {
public String readItem() {
System.out.println("구매하실 상품명과 수량을 입력해 주세요. (예: [사이다-2],[감자칩-1])");
String input = Console.readLine();
// ...
}
// ...
}
public class OutputView {
public void printProducts() {
System.out.println("- 콜라 1,000원 10개 탄산2+1");
// ...
}
// ...
}
camp.nextstep.edu.missionutils
에서 제공하는 DateTimes
및 Console
API를 사용하여 구현해야 한다.camp.nextstep.edu.missionutils.DateTimes
의 now()
를 활용한다.camp.nextstep.edu.missionutils.Console
의 readLine()
을 활용한다.