1. ๊ฐ์
22๋ 11์ 9์ผ 15์์ 3์ฃผ ์ฐจ ๋ฏธ์ ์๋ด ์ด๋ฉ์ผ์ด ๋์ฐฉํ๋ค. ์ผ์ฃผ์ผ ๋์ ์ด๋ฃจ์ด์ง ์ฐ์ํํ ํฌ์ฝ์ค ํ๋ฆฌ์ฝ์ค 3์ฃผ ์ฐจ ๋ก๋ ๊ฒ์ ๋ฏธ์ ์ ๋ํ ๊ฐ๋จํ ์๊ฐ์ ์๊ฐ์ ์์ฑํ๋ค.
2. ๋ฏธ์ ์๊ฐ
ํ๋ฆฌ์ฝ์ค 3์ฃผ ์ฐจ์ ๋ฏธ์ ์ ๋ก๋ ๊ฒ์์ ๋ง๋๋ ๊ฒ์ด์๋ค. ์ถ๊ฐ๋ ํ๋ก๊ทธ๋๋ฐ ์๊ตฌ ์ฌํญ์ ์๋์ ๊ฐ๋ค.
- ํจ์(๋๋ ๋ฉ์๋)์ ๊ธธ์ด๊ฐ 15๋ผ์ธ ๋์ด๊ฐ์ง ์๋๋ก ๊ตฌํํ๋ค.
- else๋ฅผ ์ง์ํ๋ค.
- ๋๋ฉ์ธ ๋ก์ง์ ๋จ์ ํ ์คํธ๋ฅผ ๊ตฌํํด์ผ ํ๋ค. ๋จ, UI(Console.readLine, Console.print) ๋ก์ง์ ๋ํ ๋จ์ ํ ์คํธ๋ ์ ์ธํ๋ค.
๋ํ ๋ฉ์ผ์๋ 3์ฃผ์ฐจ ๋ฏธ์ ์์ ์ถ๊ฐ๋ ํ์ต ๋ชฉํ๋ ์ ์ํ์๋ค. ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
- ํด๋์ค(๊ฐ์ฒด)๋ฅผ ๋ถ๋ฆฌํ๋ ์ฐ์ต
- ๋๋ฉ์ธ ๋ก์ง์ ๋ํ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ ์ฐ์ต
์๋กญ๊ฒ ์ถ๊ฐ๋ ํ๋ก๊ทธ๋๋ฐ ์๊ตฌ ์ฌํญ๊ณผ ํ์ต ๋ชฉํ๋ฅผ ๋ฐํ์ผ๋ก ์ด๋ฒ ์ฃผ์ฐจ ๋ฏธ์ ์ ํด๊ฒฐํ๊ณ ์ ๋ ธ๋ ฅํ์๋ค.
๋์ฑ ์์ธํ ๋ด์ฉ์ ์๋์ ๋ฏธ์ ์ ์ฅ์๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
์ฐ์ํ ํ ํฌ์ฝ์ค 3์ฃผ์ฐจ ๋ก๋ ๊ฒ์ ๋ฏธ์ ์ ์ฅ์
3. ๊ฐ๊ฒฐํ ๊ธฐ๋ฅ ๋ชฉ๋ก ์์ฑ
์ ๋ฒ ์ฃผ ์ฐจ ๋ฏธ์ ์ธ ์ซ์ ์ผ๊ตฌ ๊ฒ์ ๋ฏธ์ ์์์ ๊ธฐ๋ฅ ๋ชฉ๋ก ์์ฑ์ ์์ธํ์ง๋ง ๊ฐ๊ฒฐํ์ง ๋ชปํ๋ ์์ฌ์์ด ์๋ค. ๊ทธ๋์ 3์ฃผ ์ฐจ ๋ฏธ์ ์์๋ ์์ธํจ์ ์ ์งํ์ง๋ง ๊ฐ๊ฒฐํจ์ ๋ํ ์ ์๋๋ก ๋ค์งํ์๋ค.
์ผ๋จ ๋ด๊ฐ ์ ์ํ ์์ธํจ์ด๋ ๊ธฐ๋ฅ ๋ชฉ๋ก๋ง ๋ณด๊ณ ๋ ์ ์ฒด๋ฅผ ํ์
ํ ์ ์๊ณ ์์ธ ์ฌํญ๋ ์ ์ ์๋ค.
์ด๋ค. ์ด๋ฅผ ๋ฐํ์ผ๋ก 2์ฃผ ์ฐจ ๋ฏธ์
์์๋ ํจ์ ํ๋ํ๋ ๊น์ง ์ธ๋ถํํ์๋ค. 3์ฃผ ์ฐจ ๋ฏธ์
์์ ๋ฐ๋ ์ ์ ํจ์ ํ๋ํ๋ ๊น์ง ์ธ๋ถํํ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ํจ์๋ค์ด ํฌํจ ๋ ์ ์๋ ๊ธฐ๋ฅ๊น์ง ์์ฑํ์๋ค๋ ๊ฒ์ด๋ค.
์ฆ, ๋ด๊ฐ ์ ์ํ ๊ฐ๊ฒฐํจ์ด๋ ํจ์๋ ์ ์ฐํ๊ฒ ์ถ๊ฐ, ์์ ์ด ๋ ์ ์์ผ๋ฏ๋ก ์ฌ๋ฌ ํจ์๋ฅผ ํฌํจํ ์ ์๋ ๊ธฐ๋ฅ
์ด๋ค. ๋ฌผ๋ก ํ๋์ ๊ธฐ๋ฅ์ ํ๋์ ํจ์๋ง ํ์ํ ์๋ ์๋ค. ๊ฐ๊ฒฐํจ์ ์ถ๊ฐํ๊ณ ๋๋ ๊ฐ์ธ์ ์ผ๋ก ์ด์ ๋ณด๋ค ๋์ฑ ๊น๋ํ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์์ฑ์ ํ ์ ์์๋ค๊ณ ์๊ฐํ๋ค.
์ถ๊ฐ์ ์ผ๋ก ํจ์ ํ๋ํ๋๋ฅผ ์ธ๋ถํํ์ฌ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์์ฑํ์ง ์์ ์ด์ ๋ ์๋์ ๊ฐ๋ค.
- ํจ์ ํ๋๊น์ง ์๊ฐํ๋ฉฐ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์์ฑํ๋ฉด ์ ์ฒด์ ์ธ ํ๋ฆ ํ์ ์ ์ด๋ ค์์ ๋๋ ์ ์๋ค. (์ฃผ๊ฐ์ ๋)
- ํ์ํ ํจ์๋ ์ง์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ถ๊ฐ, ์ญ์ ๋ ์ ์๋ค.
- ๋ฆฌํฉํฐ๋ง์ ํตํด ํจ์๋ฅผ ๋ถ๋ฆฌํ ์ ์๊ณ ํจ์๋ช ๋ํ ๋ณ๊ฒฝ๋ ์ ์๋ค.
- ์์ ์ด ์ธ์ ๋ ์ง ๊ฐ๋ฅํ ์ด์์๋ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ๋ง๋ค๊ณ ์ ํ์๋ค.
3์ฃผ์ฐจ ๋ฏธ์ ์ ๊ธฐ๋ฅ ๋ชฉ๋ก ๋งํฌ
4. ํด๋์ค์ ๊ธฐ๋ณธ ํ์ต
3์ฃผ ์ฐจ ๋ฏธ์
๋ถํฐ ํด๋์ค๋ฅผ ์ฌ์ฉํ์๊ณ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๋ ์ฐ์ต์ ํ๊ณ ์๋ค. ํด๋์ค๋ ๋ฌด์์ผ๊น? ๋ด๊ฐ ์๊ณ ์๋ ํด๋์ค์ ๊ฐ๋
์ ํ์ค ์ธ๊ณ์ ์๋ ์ด๋ค ๊ฒ์ ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ๋ก ๊ทธ๋๋ก ์ฎ๊ธด ๋ฌด์ธ๊ฐ
์ด๋ค. ๋ํ ํด๋์ค๋ฅผ ํตํด ์ธ์คํด์ค๊ฐ ๋ง๋ค์ด์ง๋ค๋ ๊ฒ์ ์๊ณ ์์๋ค.
์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋จ ํ ๋ฒ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์ด ์๋ค. ์ ๋ง ์๋ค...(๊ทธ๋๋ง ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถํ ๋ ๋งํฌ๋๋ฆฌ์คํธ, ํ ๋ฑ์ ๊ตฌํํ ๋๊ฐ ์ ์ผํ๋ค.) ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ค์ ์ทจ์ฝํ ์ ์ด ์๊ธฐ์ ํด๋์ค์ ๋ํ ํ์ต์ ์งํํ์๋ค.
์ด๋ฒ ํ์ต์ ํตํด ์๊ฒ ๋ ํต์ฌ์ ๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ๋ค.
- ์ ์ ๋ฉ์๋์์๋
this
ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. - Class field declarations proposal์ ํตํด ํด๋์ค ๋ณ์ ์ "#"์ ์๋ฏธ
๋ฌผ๋ก ์์ง ํด๋์ค์ ๋ํ ๋ชจ๋ ํ์ต์ด ์ด๋ฃจ์ด์ง์ง ์์๋ค. ์์, super, ์บก์ํ ๋ฑ๋ฑ ๋ฐฐ์์ผ ํ ๊ฒ๋ค์ด ์ฐ๋๋ฏธ์ด๋ค. ๋ชจ๋ ๊ฒ์ ํ์ตํ๊ฒ ๋ค๊ณ ๋ฌด์์ ๋ฌ๋ ค๋ค์๋ค๋ฉด ๊ธ๋ฐฉ ์ง์น ํ ๋ ํ์ํ ๊ฐ๋ ์ด ์๊ธฐ๋ฉด ๋ฐ๋ก๋ฐ๋ก ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
์๋๋ ์ด๋ฒ ํด๋์ค๋ฅผ ํ์ตํ๋ฉด์ ์ ๋ฆฌํ TIL์ด๋ค.
5. Lotto ํด๋์ค์ ์๋ฏธ
์ ๊ณต๋ Lotto ํด๋์ค๋ฅผ ํ์ฉํด ๊ตฌํํด์ผ ํ๋ค.
์ด๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์๊ตฌ ์ฌํญ์ด์๋ค. ์ ๊ณต๋ Lotto
ํด๋์ค์ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
class Lotto {
#numbers;
constructor(numbers) {
this.validate(numbers);
this.#numbers = numbers;
}
validate(numbers) {
if (numbers.length !== 6) {
throw new Error();
}
}
// TODO: ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ
}
๊ธฐ๋ฅ ๋ชฉ๋ก์ ์์ฑํ๋ฉด์ ์ด Lotto
ํด๋์ค๊ฐ ๊ณผ์ฐ ์ด๋ค ์ญํ ์ ํ๋์ง ๊ณ ๋ฏผ์ ํ์๋ค. ํนํ Lotto
ํด๋์ค์ ์๋ฏธ๋ฅผ ๋จผ์ ์ ์ํ๊ณ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ๋ก ํ๋ค.
- ํ๋ ์ด์ด๊ฐ ๊ตฌ๋งคํ ๋ก๋(๋ณต์)๋ฅผ ์๋ฏธ
- ๊ฐ๊ฐ์ ๋ก๋ ํ๋(๋จ์)๋ฅผ ์๋ฏธ
๊ณผ์ฐ ์ด๋ค ์๋ฏธ์ผ๊น? ์ ๋ต์ด ์ ํด์ ธ ์๋ ๊ฒ์ผ๊น? ์๋ชป ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ฉด ์ด๋กํ์ง? ๋ฑ๊ณผ ๊ฐ์ ๊ณ ๋ฏผ์ด ์์๋์๊ณ ๊ณ ๋ฏผ ๋์ ๊ฐ๊ฐ ํ๋์ฉ ์กด์ฌํ๋ ๋ก๋๋ก ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค. ์ฆ, ํ๋ ์ด์ด๊ฐ ๊ตฌ๋งค ๊ธ์ก์ ์
๋ ฅํ๊ฒ ๋๋ฉด Lotto
ํด๋์ค๋ฅผ ํตํด ๊ตฌ๋งค ๊ธ์ก์ ๋ง๊ฒ Lotto
์ธ์คํด์ค๋ค์ด ์์ฑ๋ ์ ์๋๋ก ์ฝ๋๋ฅผ ์์ฑํ์๋ค.
๊ทธ๋ ๋ค๋ฉด Lotto
ํด๋์ค๋ฅผ ํตํด ๋ง๋ค์ด์ง ๋ค์์ Lotto
์ธ์คํด์ค๋ค์ ์ด๋์์ ๊ด๋ฆฌ๋ฅผ ํด์ผ ํ ๊น? ๋ Lottos
ํด๋์ค๋ฅผ ๋ง๋ค์ด ๊ด๋ฆฌ๋ฅผ ํ์๋ค. Lottos
ํด๋์ค์ ๋ณ์๋ก list
๋ฅผ ๋ง๋ค์ด ๋ฐฐ์ด์ ํํ๋ก ๊ด๋ฆฌ๋ฅผ ํ์๊ณ Lottos
ํด๋์ค๋ฅผ ํตํด Lotto
์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ ์ ํ์๋ค.
์๋์ Lottos
ํด๋์ค๋ฅผ ๊ฐ๋จํ๊ฒ ๋ถ์ํด๋ณด์.
class Lottos {
constructor(money) {
this.validate(money);
this.count = money / MONEY.UNIT;
this.list = [];
this.publish();
}
validate(money) {
// ์๋ต
}
publish() {
for (let num = 0; num < this.count; num++) {
const newLotto = this.createNewLotto();
this.list.push(newLotto);
}
}
createNewLotto() {
const newNumbers = Random.pickUniqueNumbersInRange(
LOTTO.MIN_NUMBER,
LOTTO.MAX_NUMBER,
LOTTO.NUMBERS_COUNT
);
return new Lotto(newNumbers);
}
// ์๋ต
}
Lottos
ํด๋์ค๋ money
๋ฅผ ๋ฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค. ์ด๋ ์ ๋ฌ๋ money
๋งํผ ๋ก๋๋ฅผ ๋ฐํํ๋ค. ์ฌ์ฉ๋๋ ๋ฉ์๋๋ publish
์ createNewLotto
์ด๋ค. createNewLotto
๋ฉ์๋์์ new Lotto()
๋ฅผ ํธ์ถํ์ฌ Lotto
์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
6. ๊ฐ๊ฐ์ ํด๋์ค์ ๋ํ ํ ์คํธ ์ฝ๋ ์์ฑ
3์ฃผ ์ฐจ ๋ฏธ์
์ธ ๋ก๋ ๊ฒ์์ ๊ตฌํํ๋ฉด์ ์ฌ์ฉํ ํด๋์ค๋ Lotto
, Lottos
, WinningNumbers
, BonusNumber
์ด๊ณ ์ฌ์ฉํ ๊ฐ์ฒด๋ Validation
์ด๋ค. ์ด๋ฅผ ์ํ ํ
์คํธ ์ฝ๋๋ฅผ ๊ฐ๊ฐ ๋ฐ๋ก ํ์ผ์ ๋ง๋ค์ด ์์ฑํ์๋ค.
๊ฐ๊ฐ์ ํ์ผ์์๋ ์ ์ฒด๋ฅผ ๋จผ์ ํ ์คํธํ์ง ์๊ณ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฐจ๋ก๋๋ก ํ ์คํธ ํ์๋ค. ํนํ ์์ธ ์ฌํญ๋ ๊ผผ๊ผผํ๊ฒ ํ ์คํธ๋ฅผ ํ ์ ์๋๋ก ๋ ธ๋ ฅํ์๋ค.
ํ์ง๋ง ์์ฌ์ด ์ ์ด ์๋ค ๋ฐ๋ก, UI์ ๋ํ ํ
์คํธ๋ฅผ ์ง์ฑํ์ง ์์๋ค๋ ๊ฒ์ด๋ค. ๊ธฐ์กด์ ์กด์ฌํ๋ ApplicationTest.js
์ ๋ณด๋ฉด Console.print()
, Console.readLine()
๋ฅผ ํ
์คํธํ๊ธฐ ์ํด mocking functions
์ ์ฌ์ฉํ๊ณ ์๋ค. ํ์ฌ 4์ฃผ ์ฐจ ๋ฏธ์
์ ์งํํ๊ณ ์๋ ์์ ์์๋ ํด๋น ๊ฐ๋
์ ๋ํ ํ์ต์ ํ์๊ธฐ์ UI์ ๋ํ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ์์ง๋ง 3์ฃผ ์ฐจ์์๋ ํ์ง ๋ชปํ๋ค๋ ๊ฒ์ด ์์ฝ๊ฒ ๋๊ปด์ง๋ค.
7. Conclusion
3์ฃผ ์ฐจ ๋ฏธ์ ์์๋ ๋์น ์ถ๋ ฅ ์๊ตฌ ์ฌํญ์ด ์๋ค. ๋ฐ๋ก, ์์ต๋ฅ ์์์
,
์ด๋ค. ๊ตฌํ์ ํฌ๊ฒ ์ด๋ ต์ง ์์๋ ๊ฒ์ด๋ผ ๋์ฑ ์์ฝ๊ฒ๋ง ๋๊ปด์ก๋ค. ๋ ๊ผผ๊ผผํ๊ฒ ๋ณผ ์ ์์๋ ๊ฒ์ผ๊น?... ์ค์ค๋ก ์์ฑ ๋ ํ์ง๋งใ ใ ์ด๋ฏธ ์ง๋๊ฐ ๋ฏธ์ ์ด๋ผ ๋ ์ด์์ ๋ฏธ๋ จ์ ๋์ง ๋ง๊ณ ๋ง์ง๋ง ๋จ์ 4์ฃผ ์ฐจ ๋ฏธ์ ์ ๋์ฑ ์ ๊ฒฝ์ ์ฐ๊ธฐ๋ก ํ์๋ค. ๊ทธ๋๋ ๋ง์ ํ ํธ์ผ๋ก ๊ณ์ ์๊ฐ์ด ๋๋ค. ํํ
์์ฌ์ด ์ ์ ๋ค๋ก ํ๊ณ ์ด๋ฒ ์ฃผ์ฐจ์์ ๊ฐ์ฅ ๋ง์ ๊ณ ๋ฏผ์ ํ๋ ๋ถ๋ถ์ดํด๋์ค์ ๋ถ๋ฆฌ
์ด๋ค. ์๋ฌด๋๋ ํด๋์ค๋ฅผ ๋ง์ด ๋ค๋ค๋ณด์ง ์์๊ธฐ ๋๋ฌธ์ ๋ถ๋ฆฌํ๋ ๋ฐ ํฐ ์ด๋ ค์์ ๊ฒช์๋ค. ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ์ง ์๊ณ ๋ชจ๋App
ํด๋์ค,Lottos
ํด๋์ค,Lotto
ํด๋์ค๋ฅผ ํตํด ๊ตฌํ์ ํ ์ ์์์ง๋ง ๋น์ฅ์ ํธ์๊ฐ ์๋๋ผ ์์ผ๋ก ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ ํ ๊ตฌํํ๊ฒ ๋ ํฐ ๊ธฐ๋ฅ์ ์ํด ๋ถ๋ฆฌํ๋ ๊ธฐ์ค์ ์ ํ๊ณ ์ ํ์๋ค. ์ผ๋จ ๋ด๊ฐ ์ ํ ๊ธฐ์ค์์ด๋ค ์ธ์คํด์ค๊ฐ ํ์ํ๊ฐ?
์ด๋ค. ๋๋ฌด ๊ฐ๋จํ์ง๋ง ํ์ฌ๋ก์ ์ด๊ฒ์ด ์ต์ ์ด๋ค. ๋ง์ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ๊ตฌ์ฒด์ ์ธ ๊ธฐ์ค์ ์ธ์๋ณด๋๋ก ํ์. ๋จ์ 4์ฃผ ์ฐจ ๋ฏธ์ ๋ ํ์ดํ !
'๐ ์ฐ์ํํ ํฌ์ฝ์ค > ์ง์ ๊ณผ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ฆฌ์ฝ์ค ์ต์ข ์ฝ๋ฉ ํ ์คํธ - ์ ์ฌ ๋ฉ๋ด ์ถ์ฒ (0) | 2023.04.10 |
---|---|
ํ๋ฆฌ์ฝ์ค 4์ฃผ ์ฐจ - ๋ค๋ฆฌ ๊ฑด๋๊ธฐ ๋ฏธ์ (0) | 2023.04.10 |
ํ๋ฆฌ์ฝ์ค 2์ฃผ ์ฐจ - ์ซ์ ์ผ๊ตฌ ๊ฒ์ ๋ฏธ์ (0) | 2023.04.10 |
ํ๋ฆฌ์ฝ์ค 1์ฃผ ์ฐจ - ์จ๋ณด๋ฉ (0) | 2023.04.10 |
์ฐ์ํํ ํฌ์ฝ์ค ์๋ฅ์ง์ (0) | 2023.04.10 |