-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation
Description
📝 java-vengdingmachine-precourse
우아한 테크코스 프리코스의 vendingmachine을 활용한 문제입니다.
미션소개는 전부 동일하지만, TDD 스터디를 위해 아래의 프로그래밍 요구사항을 추가하였습니다. 그 부분 잘 읽으시고 미션 진행해주세요~!미션을 100% 다 해내지 못하셔도 괜찮습니다. TDD스터디인 만큼 TDD를 지키면서 설계할 수 있는 것을 목표로 미션을 구현해주세요!
💬 미션 소개
브랜치 mission#1 에 해당 미션내용을 올려두었습니다.
각자 자기이름의 브랜치(mission#1-baekeunsun)를 파서 mission#1브랜치에 PR 올리는 방식으로 진행하겠습니다
(이 방법은 향후에 변경될 수 있음)
- 미션 소개
📌 기능 요구사항
반환되는 동전이 최소한이 되는 자판기를 구현한다.
- 자판기가 보유하고 있는 금액으로 동전을 무작위로 생성한다.
- 투입 금액으로는 동전을 생성하지 않는다.
- 잔돈을 돌려줄 때 현재 보유한 최소 개수의 동전으로 잔돈을 돌려준다.
- 지폐를 잔돈으로 반환하는 경우는 없다고 가정한다.
- 상품명, 가격, 수량을 입력하여 상품을 추가할 수 있다.
- 상품 가격은 100원부터 시작하며, 10원으로 나누어떨어져야 한다.
- 사용자가 투입한 금액으로 상품을 구매할 수 있다.
- 남은 금액이 상품의 최저 가격보다 적거나, 모든 상품이 소진된 경우 바로 잔돈을 돌려준다.
- 잔돈을 반환할 수 없는 경우 잔돈으로 반환할 수 있는 금액만 반환한다.
- 반환되지 않은 금액은 자판기에 남는다.
- 사용자가 잘못된 값을 입력할 경우
IllegalArgumentException를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 해당 부분부터 다시 입력을 받는다. - 아래의 프로그래밍 실행 결과 예시와 동일하게 입력과 출력이 이루어져야 한다.
✍🏻 입출력 요구사항
⌨️ 입력
- 상품명, 가격, 수량은 쉼표로, 개별 상품은 대괄호([])로 묶어 세미콜론(;)으로 구분한다.
[콜라,1500,20];[사이다,1000,10]
🖥 출력
- 자판기가 보유한 동전
500원 - 0개
100원 - 4개
50원 - 1개
10원 - 0개
- 잔돈은 반환된 동전만 출력한다.
100원 - 4개
50원 - 1개
- 예외 상황 시 에러 문구를 출력해야 한다. 단, 에러 문구는 [ERROR]로 시작해야 한다.
[ERROR] 금액은 숫자여야 합니다.
💻 프로그래밍 실행 결과 예시
자판기가 보유하고 있는 금액을 입력해 주세요.
450
자판기가 보유한 동전
500원 - 0개
100원 - 4개
50원 - 1개
10원 - 0개
상품명과 가격, 수량을 입력해 주세요.
[콜라,1500,20];[사이다,1000,10]
투입 금액을 입력해 주세요.
3000
투입 금액: 3000원
구매할 상품명을 입력해 주세요.
콜라
투입 금액: 1500원
구매할 상품명을 입력해 주세요.
사이다
투입 금액: 500원
잔돈
100원 - 4개
50원 - 1개
프로그래밍 요구사항 - Coin
- Coin 클래스를 활용해 구현해야 한다.
- 필드(인스턴스 변수)인
amount의 접근 제어자 private을 변경할 수 없다.
public enum Coin {
COIN_500(500),
COIN_100(100),
COIN_50(50),
COIN_10(10);
private final int amount;
Coin(final int amount) {
this.amount = amount;
}
// 추가 기능 구현
}‼️ 프로그래밍 요구사항
- 프로그램 구현을 완료했을 때
src/test/java디렉터리의ApplicationTest에 있는 모든 테스트 케이스가 성공해야 합니다. - 프로그램이 클라이언트의 요청에 대해 응답할 때, JSON 형식을 사용하여 데이터를 반환해야 합니다. 클라이언트가 요청한 작업에 대한 결과 및 필요한 정보는 JSON 객체에 포함되어야 합니다.
- H2 데이터베이스를 활용하여 필요한 테이블을 생성하고, 데이터의 저장 및 조회 등의 기능을 구현해야 합니다.
🔍 세부사항
추가적인 세부사항을 정의하고 아래 세부사항을 변경할 수 있습니다.
- JDK 17을 사용합니다. 다른 자바 버전을 사용해도 좋으나 JDK 17에서 정상적으로 동작해야합니다.
- 프로그램의 시작점은
Application.main()입니다. build.gradle에 기본 설정된 라이브러리 외 외부 라이브러리를 사용해도 좋습니다. 라이브러리 도입 과정과 이유를docs/TECH.md에 명확하게 작성하고 사용 기능에 대한 기술검증과 테스트를 진행합니다.- 프로그램을 종료해야하는 상황에서
System.exit()을 호출하지 않습니다. - 필요한 경우 멀티모듈로 빌드합니다.
Metadata
Metadata
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation