Skip to content

[3월 2주차] java-vending machine #1

@baekeunsun

Description

@baekeunsun

📝 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 documentation

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions