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

웹 백엔드 유틸리티 라이브러리를 사용하여 자판기 미션을 구현해 본다. - 8월 30일 #88

Closed
Joyykim opened this issue Aug 3, 2021 · 6 comments
Assignees

Comments

@Joyykim
Copy link

Joyykim commented Aug 3, 2021

자판기 미션 요구 사항
유틸리티 라이브러리(wooteco-utils) 깃헙 레포지토리

@unluckyjung
Copy link

unluckyjung commented Aug 3, 2021

FE + BE 회의

(08.03.화 20:00 ~ 21:18)

  • 기존에 작성한 백엔드 테스트 코드에 FE팀이 맞추기로한다.
2단계 - 돈통
기능 요구 사항
입력한 금액으로 동전을 무작위로 생성한다.

요구 사항에 따르면 동전을 무작위로 생성해야하는데, 이부분을 통제할 mocking이 필요하다.

  • 이부분에 대한 토의는 동전을 무작위로 생성해주는 유틸 메소드를 만드는것으로 결론 냈다.
    • 테스트의 용이성을 위해서

미션에 종속되는 메소드가 생기는것은 어쩔수 없는 불가피한 현상이라고 결론 지음.
지원자들의 혼란을 방지하기 위해서, 미션이름이 붙은 클래스를 만들고, 메소드를 제공하기로 결론냈다.

그래서 나온 메소드와 클래스의 형태는

// VendingMachineUtils.class

public class VendingMachineUtils {

    public static List<Integer> changeToCoins(int amount) {
        ...
        return coins;
    }
}

위와 같다.

백엔드

출력 포맷 변경

실행 결과
자판기가 보유하고 있는 금액을 입력해 주세요.
10000

상품명과 수량, 금액을 입력해 주세요.
[콜라,20,1500],[사이다,10,1000]

투입할 금액을 입력해 주세요.
3000

투입된 금액: 3000원
구매할 상품명을 입력해 주세요.
콜라

투입된 금액: 1500원
구매할 상품명을 입력해 주세요.
사이다

잔돈
500원 - 1개
  • 기존의 투입 금액을 입력해 주세요. 은 모호하다고 판단되어

    • 투입할 금액을 입력해 주세요.로 변경
  • 기존의 투입 금액: 3000원 은 모호하다고 판단되어

    • 투입된 금액: 3000원으로 변경

@woowahan-pjs woowahan-pjs changed the title 웹 백엔드 미션 유틸리티 라이브러리를 사용해 자판기 미션을 구현하고 채점 코드를 작성한다. - 8월 9일 유틸리티 라이브러리를 사용하여 자판기 미션을 구현하고 채점 코드를 작성해 본다. - 8월 9일 Aug 3, 2021
@unluckyjung
Copy link

unluckyjung commented Aug 3, 2021

제이슨 피드백

  • 기존의 유틸라이브러리를 최대한 활용해보아라.
  • 미션에 종속적인 클래스, 메서드 사용을 지양하라.
    • VendingMachineUtils.class, changeToCoins 을 철회 해보는건 어떻겠냐는 제안

제이슨이 제안한 방식

  public static int pick(final int startInclusive, final int endInclusive) {

      validateRange(startInclusive, endInclusive);

      return startInclusive + RANDOM.nextInt(endInclusive - startInclusive + 1);
  }

 // TODO : 제이슨이 제안한 방식
  public static int pick(final List<Integer> numbers) {
      return numbers.get(pick(0, numbers.size() - 1));
  }
  • 입력한 금액이 통제 가능하기 때문에, 충분히 pick의 경우도 통제가 가능해보인다.
  • 대신 미션 요구사항에 pick 메소드를 사용하라는 강제성 부여가 반드시 필요해보인다.

Conclusion

  • 만장일치 제이슨 피드백 반영하기로 결론

@unluckyjung
Copy link

unluckyjung commented Aug 4, 2021

배포 버전

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

dependencies {
        implementation 'com.github.Joyykim:wooteco-utils:0.1.0'
}

잘못된 입력에 대한 논의

상황1 : 투입할 금액을 입력해 주세요. 에서 음수나, 숫자가 아닌 다른것을 입력한경우
상황2: 구매할 상품명을 입력해주세요. 에서 없는 상품명을 입력하는경우

이런 상황에대해서 재입력을 해달라는 메시지를 띄우고, 재입력을 기대하기보다
illegalargumentexception 을 띄우고, 프로그램이 죽도록 구성

  • 테스트하기가 용이

@unluckyjung
Copy link

@hsik0225
Copy link

hsik0225 commented Aug 9, 2021

@woowahan-pjs woowahan-pjs changed the title 유틸리티 라이브러리를 사용하여 자판기 미션을 구현하고 채점 코드를 작성해 본다. - 8월 9일 웹 백엔드 유틸리티 라이브러리를 사용하여 자판기 미션을 구현하고 요구 사항을 개선해 본다. - 8월 9일 Aug 9, 2021
@woowahan-pjs woowahan-pjs changed the title 웹 백엔드 유틸리티 라이브러리를 사용하여 자판기 미션을 구현하고 요구 사항을 개선해 본다. - 8월 9일 웹 백엔드 유틸리티 라이브러리를 사용하여 자판기 미션을 구현하고 요구 사항을 개선해 본다. - 8월 11일 Aug 9, 2021
@woowahan-pjs woowahan-pjs changed the title 웹 백엔드 유틸리티 라이브러리를 사용하여 자판기 미션을 구현하고 요구 사항을 개선해 본다. - 8월 11일 웹 백엔드 유틸리티 라이브러리를 사용하여 자판기 미션을 구현해 본다. - 8월 11일 Aug 9, 2021
@woowahan-pjs woowahan-pjs changed the title 웹 백엔드 유틸리티 라이브러리를 사용하여 자판기 미션을 구현해 본다. - 8월 11일 웹 백엔드 유틸리티 라이브러리를 사용하여 자판기 미션을 구현해 본다. - 8월 30일 Aug 11, 2021
@woowahan-pjs
Copy link
Contributor

woowahan-pjs commented Sep 3, 2021

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

No branches or pull requests

4 participants