Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
baekeunsun opened this issue Mar 13, 2024 · 1 comment
Open

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

baekeunsun opened this issue Mar 13, 2024 · 1 comment
Assignees
Labels
documentation Improvements or additions to documentation

Comments

@baekeunsun
Copy link
Member

baekeunsun commented Mar 13, 2024

📝 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()을 호출하지 않습니다.
  • 필요한 경우 멀티모듈로 빌드합니다.
@baekeunsun baekeunsun added the documentation Improvements or additions to documentation label Mar 13, 2024
@baekeunsun
Copy link
Member Author

이슈 작성해두었습니다 다들 화이팅~~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

5 participants