-
Notifications
You must be signed in to change notification settings - Fork 4
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()์ ํธ์ถํ์ง ์์ต๋๋ค. - ํ์ํ ๊ฒฝ์ฐ ๋ฉํฐ๋ชจ๋๋ก ๋น๋ํฉ๋๋ค.