DevLog ๐Ÿ˜ถ

[์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] 5๊ธฐ ๋ฐฑ์—”๋“œ 3์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ํšŒ๊ณ ๋ก ๋ณธ๋ฌธ

์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค/ํ”„๋ฆฌ์ฝ”์Šค

[์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] 5๊ธฐ ๋ฐฑ์—”๋“œ 3์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ํšŒ๊ณ ๋ก

dolmeng2 2022. 11. 17. 22:48

- ๋ฒŒ์จ 3์ฃผ์ฐจ๊ฐ€ ๋๋‚ฌ๋‹ค. ์‚ฌ์‹ค ๋๋‚œ ์ง€ ์ดํ‹€ ๋๋Š”๋ฐ ์ •์‹  ์—†์–ด์„œ ์ด์ œ ํšŒ๊ณ ๋ก์„ ์ž‘์„ฑํ•œ๋‹ค...

 

| 2์ฃผ์ฐจ ํšŒ๊ณ ๋ก

 

[์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] 5๊ธฐ ๋ฐฑ์—”๋“œ 2์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ํšŒ๊ณ ๋ก

- ๋ฒŒ์จ 2์ฃผ์ฐจ ๋งˆ๋ฌด๋ฆฌ...? ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋นจ๋ผ์„œ ๋ฏฟ๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ์˜ค๋Š˜ ํ•˜๋ฃจ ํšŒ๊ณ ๋ž‘ ํ•จ๊ป˜ ์‰ฌ๋ฉด์„œ ๋‹ค์‹œ 3์ฃผ์ฐจ ๋‹ฌ๋ฆด ์ค€๋น„ํ•ด์•ผ์ง€...๐Ÿ˜ต‍๐Ÿ’ซ | 1์ฃผ์ฐจ ํšŒ๊ณ ๋ก [์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] 5๊ธฐ ๋ฐฑ์—”๋“œ 1์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ํšŒ

cl8d.tistory.com

 

| 3์ฃผ์ฐจ ์ฝ”๋“œ

 

GitHub - Cl8D/java-lotto: ๋กœ๋˜ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋Š” ์ €์žฅ์†Œ

๋กœ๋˜ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋Š” ์ €์žฅ์†Œ. Contribute to Cl8D/java-lotto development by creating an account on GitHub.

github.com

 


| 3์ฃผ์ฐจ ์ปค๋ฐ‹ ๊ธฐ๋ก ์‚ดํŽด๋ณด๊ธฐ

- ์‚ฌ์‹ค ์ด๋ฒˆ ์ฃผ์ฐจ๋„ ์ปค๋ฐ‹์„ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ด ํ•˜๋ ค๊ณ  ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ œํ•œ ์‹œ๊ฐ„ ๋‚ด์— ํ’€์–ด๋ณด๋Š” ๊ฒŒ ๋ชฉํ‘œ์˜€๊ธฐ ๋•Œ๋ฌธ์—...

- ํ•˜์ง€๋งŒ ์–ด๋ฆผ๋„ ์—†์—ˆ๋‹ค. 3์ฃผ์ฐจ ์ปค๋ฐ‹์€ 78๊ฐœ๊ฐ€ ๋˜์–ด๋ฒ„๋ ธ๋‹ค...

๊ทธ๋ž˜๋„ ์˜์–ด๋กœ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒŒ ๊ฝค ์ต์ˆ™ํ•ด์ง„ ๋Š๋‚Œ์ด๋‹ค. ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‚ด๊ฐ€ ๋ญ˜ ์จ์•ผ ๋ ์ง€ ์ž‘์„ฑ๋˜๋Š” ๊ธฐ๋ถ„...? (๊ทผ๋ฐ ์—ฌ์ „ํžˆ ํŒŒํŒŒ๊ณ  ๋ชป ๋†“๋Š”๋‹ค)

๊ทธ๋ฆฌ๊ณ  ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜๋„ ์†์— ์™„์ „ํžˆ ์ต์–ด์„œ ์ด์ œ ๋” ์•ˆ ์ฐพ์•„๋ณด๊ณ  ํ•˜๊ณ  ์žˆ๋‹ค. ์ข‹์€ ์Šต๊ด€์„ ๊ฐ€์ ธ๊ฐ„ ๊ฒƒ ๊ฐ™์•„์„œ ์ข‹๋‹ค.

- ์ตœ์ข… ์‹œํ—˜์„ ์•ž๋‘๊ณ  5์‹œ๊ฐ„ ๋‚ด์— ํ’€์–ด๋ณด๋ ค๊ณ  ์Šคํ†ฑ์›Œ์น˜๊นŒ์ง€ ๊ตด๋ ธ๋Š”๋ฐ ๊ฑฐ์˜ 9์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค. ๋‚˜์ค‘์— 5์‹œ๊ฐ„ ๋‚ด์— ์ด๊ฑฐ ๊ตฌํ˜„์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ ์‹ถ๋‹ค.

๋ฌผ๋ก  ์ด๊ฒƒ๋„... ํ”„๋ฆฌ์ฝ”์Šค๋ฅผ ๋ถ™์–ด์•ผ ํ•˜๋Š” ๋ง์ด์ง€๋งŒ... ์ž˜ํ•  ์ž์‹  ์žˆ๋Š”๋ฐ........


| ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ ์ž‘์„ฑํ•˜๊ธฐ

- ์ €๋ฒˆ ์ฃผ ํšŒ๊ณ ์—์„œ ๋‹ค์Œ ์ฃผ์ฐจ์— ๊ผญ ์ง€ํ‚ค๊ณ  ์‹ถ์–ด ํ–ˆ๋˜ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๋จผ์ € 1์ฐจ์ ์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ , ๋ช…์„ธ์„œ๋ถ€ํ„ฐ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ.

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ์ฃผ์ฐจ ๊ณผ์ œ์—์„œ ๋ช…์„ธ์„œ ์งœ๋Š” ๋ถ€๋ถ„๋งŒ 1์‹œ๊ฐ„ 30๋ถ„์€ ์“ด ๊ฒƒ ๊ฐ™๋‹ค. 

์š”๊ตฌ ์‚ฌํ•ญ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ๋ณด๋ฉด์„œ ๊ธฐ๋Šฅ ๋ถ„๋ฆฌ๋ฅผ ํ–ˆ๋Š”๋ฐ, ํ•œ ๊ฐ€์ง€ ์•„์‰ฌ์šด ๊ฑด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋„ˆ๋ฌด ๋ชจ๋“  ๊ฑธ ์ฑ™๊ธฐ๋ ค๊ณ  ํ–ˆ๋˜ ์ ์ด๋‹ค.

์•„๋ฌด๋ฆฌ ์ž˜ ์ž‘์„ฑํ•ด๋„ ์ฝ”๋“œ๋ฅผ ์งœ๋‹ค ๋ณด๋ฉด ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ๋‚˜์˜ฌ ์ˆ˜๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์—... ๐Ÿ˜ฅ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” 30๋ถ„ ์ •๋„๋กœ ์งง๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋ณผ๊นŒ ํ•œ๋‹ค.

์‚ด์•„์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค๋ผ๋Š” 2์ฃผ์ฐจ ํ”ผ๋“œ๋ฐฑ์„ ๋‹ค์Œ ์ฃผ์ฐจ์—์„œ๋Š” ๊ผญ... ์ง€์ผœ๋ณด์ž.

 

- ๊ทธ๋ž˜๋„ ๋ฟŒ๋“ฏํ•œ ๊ฑด ํ•˜๋‚˜ ๊ตฌํ˜„ํ•  ๋•Œ๋งˆ๋‹ค โ˜‘๏ธ ํ‘œ์‹œํ•˜๋ฉด์„œ ์ง„ํ–‰ํ•œ ์ ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๊ธฐ๋Šฅ๋งˆ๋‹ค ๋ฉ”์„œ๋“œ๋ช…๋„ ํ•จ๊ป˜ ๋‹ฌ์•„๋‘์—ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ๊นŒ ๋‚˜์ค‘์— ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ์—์„œ ๋ฉ”์„œ๋“œ ์ฐพ์•„๊ฐ€๊ธฐ๋„ ํŽธํ•˜๊ณ , ๋‚ด๊ฐ€ ๋ญ˜ ๊ตฌํ˜„ํ•œ์ง€ ํ™•์‹คํžˆ ์•Œ ์ˆ˜ ์žˆ์–ด์„œ ํŽธํ–ˆ๋‹ค. ํŠนํžˆ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์งค ๋•Œ ๋งค์šฐ ๊ตฟ!

 

- ์ง€๊ธˆ ์™€์„œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ, ์˜ˆ์™ธ ์‚ฌํ•ญ์—์„œ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ž…๋ ฅ ์‹œ ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ๋™์ผํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋“ค์–ด์˜ค๋Š”์ง€๋„ ์ฒดํฌํ–ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ... ์ด ๋ถ€๋ถ„์€ ์ƒ๊ฐ ๋ชป ํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹น์ฒจ ๊ธˆ์•ก์„ long์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธด ํ–ˆ์ง€๋งŒ, ๊ทธ ์ด์ƒ์˜ ๋ฒ”์œ„๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€... ์ด๋Ÿฐ ๊ฒƒ๋„ ๊ณ ๋ฏผํ–ˆ์–ด์•ผ ๋๋Š”๋ฐ!!! ์•„์‰ฝ๋‹ค ใ… ใ… 

๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์–ด๋–ค ์ œํ•œ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ๋”ฐ์ ธ๋ณด๋Š” ๊ฒƒ๋„ ์ •๋ง ์ค‘์š”ํ•œ ์Šต๊ด€์ธ ๊ฒƒ ๊ฐ™๋‹ค. 

๋‹ค์Œ ์ฃผ์ฐจ์—์„œ๋Š” ์กฐ๊ธˆ ๋” ํ™•์‹คํ•˜๊ฒŒ ๋”ฐ์ ธ๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค... ใ… ใ… 

 


| ๋„๋ฉ”์ธ ๊ตฌ์กฐ?

- ์ด๋ฒˆ ์ฃผ์ฐจ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™๋‹ค. DDD๋Š” ๋ง๋กœ๋งŒ ๋“ค์–ด๋ณด๊ณ  ์Šต๊ด€์ฒ˜๋Ÿผ entity / repository / service ๋‚˜๋ˆ„๋Š” ๊ฒŒ ๋‹ค์˜€๋Š”๋ฐ ์ด๋ฒˆ ์ฃผ์ฐจ ๊ณผ์ œ์—์„œ ์ž‘์ •ํ•˜๊ณ  ์งœ๋ ค๊ณ  ํ•˜๋‹ˆ๊นŒ ๋จธ๋ฆฌ๊ฐ€ ๊ต‰์žฅํžˆ ์•„ํŒ ๋‹ค.

- ์‚ฌ์‹ค ๊ทธ๋ž˜์„œ MVC ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ๋˜๋‚˜ ์‹ถ์—ˆ๋Š”๋ฐ, ์‹ค์ œ ์‹œํ—˜ ์‹œ๊ฐ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋‹ˆ๊นŒ ์ฐจ๋งˆ ์†์ด ์ž˜ ์•ˆ ๋–จ์–ด์กŒ๋‹ค. ๋‹ค์Œ ์ฃผ์ฐจ์—๋Š” ํ•œ ๋ฒˆ ์‹œ๋„ํ•ด๋ณผ์ง€ ๊ณ ๋ฏผ์ด๋‹ค. ์˜คํžˆ๋ ค ๋„ˆ๋ฌด ๊ตฌ์กฐ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์—ฌ์ „ํžˆ ๊ณ ๋ฏผ์ด์ง€๋งŒ...

 

- ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋Š” ์ด๋ ‡๊ฒŒ ์งฐ๋‹ค. ํ•œ ๊ฐ€์ง€ ๋‹ฌ๋ผ์ง„ ์ ์€ ์ƒ์ˆ˜๋ฅผ enum์œผ๋กœ ๊ด€๋ฆฌํ•œ ๊ฒƒ!

 

- ๊ทธ๋ฆฌ๊ณ  ๋„๋ฉ”์ธ์„ ํฌ๊ฒŒ 5๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค.

- ๋กœ๋˜ (์ฃผ์–ด์ง„ ํด๋ž˜์Šค, ๋กœ๋˜ ๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ํด๋ž˜์Šค)

- ๋กœ๋˜ ๋‹น์ฒจ ๊ด€๋ฆฌ (LottoPrize) -> ๋‹น์ฒจ ํ†ต๊ณ„๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•œ๋‹ค.

- ๋กœ๋˜ ๊ตฌ๋งค (LottoPurchase) -> ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

- ๋กœ๋˜ ๊ฒฐ๊ณผ (LottoResult) -> ์‚ฌ์‹ค ์„œ๋ธŒ ํด๋ž˜์Šค๋กœ ์“ฐ์—ฌ๋„ ๋œ๋‹ค. ๋กœ๋˜ ๋‹น์ฒจ ํ†ต๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์šฉ์ดํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋ ค๊ณ  ์‚ฌ์šฉํ•˜์˜€๋‹ค.

์„œ๋ธŒ ํด๋ž˜์Šค๋กœ ์“ฐ์ด๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ ํ…Œ์ŠคํŠธ ์‹œ ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•ด์•ผ ๋ ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ (private๋ผ๊ณ  ๊ฐ€์ •) ๊ทธ๋ƒฅ ์ €๋Ÿฐ ์‹์œผ๋กœ ๋บ๋‹ค... 

- ๋กœ๋˜ ๋‹น์ฒจ ๋ฒˆํ˜ธ (LottoWinningNumber) -> ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ์— ๋Œ€ํ•ด์„œ ๊ด€๋ฆฌํ•œ๋‹ค. ์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋‘˜์„ ๋‚˜๋ˆ„๋Š” ๊ฒŒ ๋” ๋‚ซ์ง€ ์•Š์•˜์„๊นŒ ์‹ถ๋‹ค... 

๋‹น์ฒจ ๋ฒˆํ˜ธ๋Š” ๊ธฐ์กด์˜ Lotto ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ์‹์œผ๋กœ ํ–ˆ์–ด๋„ ๋์„ ๊ฒƒ ๊ฐ™์€๋ฐ ์•„์‰ฝ๋‹ค. ์™œ ์ด๋Ÿฐ ๊ฑด ํšŒ๊ณ ํ•˜๋ฉด ๋ณด์ด๋Š” ๊ฑธ๊นŒ...

 

- ๊ตฌํ˜„ํ•œ ๊ฒƒ ์ค‘์— ๋ฟŒ๋“ฏํ–ˆ๋˜ ๊ฑฐ! 

- ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋™์ ์œผ๋กœ ๊ฐ’์„ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ์„๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€... ์žŠ๊ณ  ์žˆ๋˜ %d %s๋ฅผ ์•Œ์ฐจ๊ฒŒ ์จ์ฃผ์—ˆ๋‹ค.

- ํŠนํžˆ ์†Œ์ˆซ์  ๋‘˜์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ ํ›„ ์ถœ๋ ฅํ•  ๋•Œ %.1f๋กœ ์ถœ๋ ฅํ•ด์ค„ ์ˆ˜ ์žˆ์—ˆ์–ด์„œ ๋” ๊น”๋”ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

- ์ง€๊ธˆ ์™€์„œ ์ข€ ์•„์‰ฌ์šด ๊ฒƒ ์ค‘ ํ•˜๋‚˜. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋Š” ๊ทธ๋Œ€๋กœ ์ƒ์ˆ˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

enum ํƒ€์ž…์˜ ๊ฐ’์„ ๋„ฃ์–ด์คฌ์–ด์•ผ ํ–ˆ๋Š”๋ฐ, ์ด๋Ÿฐ ์‹์œผ๋กœ string concat ๋ฐฉ์‹์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค... enum์—์„œ ๋™์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‚˜?

๋‹น์‹œ ์ฝ”๋“œ ์งค ๋•Œ๋Š” enum์˜ value ๊ฐ’์œผ๋กœ ์ €๋ ‡๊ฒŒ ํ•ฉ์นœ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ enum์€ ์‚ฌ์‹ค ์ƒ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†๋Š” ๊ฐ’์ด์–ด์„œ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ํ•ฉ์ณ์ฃผ๋Š” ๊ฒŒ ์•ˆ ๋๋‹ค. (์ด ์ด์œ ๊ฐ€ ํ™•์‹คํ•œ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋‹น์‹œ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ๋‹ค)

 

- ์ด๋ ‡๊ฒŒ ์•ˆ ํ•˜๋ ค๋ฉด %s ๊ฐ™์€ ๊ฑธ๋กœ ๋ฐ”๊นฅ์—์„œ ๋™์ ์œผ๋กœ ๋„ฃ์–ด์ฃผ๋“ ์ง€ ํ•˜๋Š” ๊ฒŒ ๋‚ซ๊ฒ ์ง€๋งŒ... ์‚ฌ์‹ค ๊ณ ์ •๋œ ๊ฐ’์ธ๋ฐ ๊ตณ์ด ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ? ์‹ถ์—ˆ๋‹ค.

์ด๊ฒŒ ์˜ณ์€ ์„ ํƒ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์•„๋ฌดํŠผ ๋ญ”๊ฐ€ ์ฐ์ฐํ•œ ๋Š๋‚Œ... ใ… 

 

- ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์งค ๋•Œ ๋ฐœ๊ฒฌํ–ˆ๋˜ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. List.of์œผ๋กœ ์ธ์ž๋ฅผ ๋„ฃ์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•  ์ˆ˜ ์—†๋˜ ๊ฒƒ...

๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ์ €๋ ‡๊ฒŒ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ํ• ๋‹นํ•ด์„œ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค. ๋ณดํ†ต ์ฝ”ํ…Œ ๋ฌธ์ œ ํ’€ ๋•Œ ๋ฐฐ์—ด์„ ๋งŽ์ด ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ ์ •๋ ฌ ๋ฐฉ์‹์ด ์‚ด์ง ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ ์ €๋Ÿฐ ์‹์œผ๋กœ ๋ฐ”๋กœ sort๋ฅผ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฒŒ ์‹ ๊ธฐํ–ˆ๋‹ค. 

- ๊ทธ๋ฆฌ๊ณ  ๋กœ๋˜ ๋ฒˆํ˜ธ ์ถœ๋ ฅํ•ด์ค„ ๋•Œ ","๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ถœ๋ ฅํ–ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ, ์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ ์ถœ๋ ฅํ•  ๋•Œ ์ €๋Ÿฐ ์‹์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋‚˜๋ˆ ์ฃผ๋Š” ๊ฒŒ ์ž๋ฐ”์— ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ ์™œ ์‚ฌ์šฉ ์•ˆ ํ–ˆ์ง€... ์˜๋ฌธ์ด๋‹ค. ์ด๊ฑด ํ•œ ๋ฒˆ ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค.

 

- ํ”ผ๋“œ๋ฐฑ ๋ณด๊ณ  ๋œจ๋”ํ–ˆ๋˜ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ฃผ์–ด์ง„ ๋กœ๋˜ ํด๋ž˜์Šค๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค.

- ์ด๋Ÿฐ ์‹์œผ๋กœ getter๋กœ ๋ฐ›์•„์™€์„œ ์™ธ๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒŒ ์ข‹์ง€ ์•Š๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ... ์ปค์Šคํ…€์œผ๋กœ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋“ค์„ ์ƒ์„ฑํ•˜๋‹ค ๋ณด๋‹ˆ๊นŒ ๋ฌธ๋“ Lotto ํด๋ž˜์Šค๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ์ ์„ ๋’ค๋Šฆ๊ฒŒ ๊นจ๋‹ฌ์•˜๋‹ค. ๋‹ค์Œ์—๋Š” ๋กœ๋˜ ๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ๋งค์น˜ ์นด์šดํŠธ ๊ณ„์‚ฐํ•˜๋Š” ๋ถ€๋ถ„ ๊ฐ™์€ ๊ฑด ๋กœ๋˜ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๊ตฌํ˜„ํ•ด์•ผ๊ฒ ๋‹ค...

 

<LottoPrize#getMatchCount>

- ํšŒ๊ณ ํ•˜๋‹ค๊ฐ€ ๋ณธ ์ฝ”๋“œ์ธ๋ฐ ์ŠคํŠธ๋ฆผ์„ ์–ด๋–ป๊ฒŒ๋“  ์“ฐ๊ณ  ์‹ถ์–ด์„œ ๋งŒ๋“ค์–ด๋‚ธ ์ด์ƒํ•œ ์ฝ”๋“œ์ด๋‹ค.

count()์˜ ๊ฒฝ์šฐ long ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— int๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹ถ์–ด์„œ wrapper ์‚ฌ์šฉํ•˜๊ณ ... ๋‹ค์‹œ intValue()๋กœ ๋นผ๋‚ด์—ˆ๋‹ค.

์ด๋Ÿด ๊ฑฐ๋ฉด ๊ทธ๋ƒฅ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฉด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒŒ ๋” ๋‚˜์•˜์„๊นŒ? ์‹ถ๊ธฐ๋„ ํ•˜์ง€๋งŒ.... ๋‹น์‹œ์—๋Š” ์—„์ฒญ ๊ณ ๋ฏผํ•œ ๊ฒฐ๊ณผ์˜€๋‹ค... ใ…Žใ…Žใ…Ž


| ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ์‚ฝ์งˆํ•˜๊ธฐ

- ๊ทธ๋ฆฌ๊ณ  ๋Œ€๋ง์˜ ๋ฉ”์ธ ์ฝ”๋“œ...! ์‚ฌ์‹ค ์ด๋ฒˆ ์ฃผ์ฐจ ๊ณผ์ œ๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋˜ ๊ฒƒ๋„ ์ด ๋•Œ๋ฌธ์ด ํฌ๋‹ค... 

'์˜ˆ์™ธ ํ…Œ์ŠคํŠธ๋ฅผ assertThat์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ ? assertThatThrownBy๊ฐ€ ์•„๋‹ˆ๋ผ...?'

 

- ๋‚˜๋ฅผ ์ •๋ง ํž˜๋“ค๊ฒŒ ํ–ˆ๋˜ ์นœ๊ตฌ... ์—ฌ๊ธฐ์„œ ๋ถ„๋ช… NoSuchElementException์œผ๋กœ ์žก๋Š”๋ฐ ๋ฌธ์ œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์€ IllegalArgumentException์œผ๋กœ ์žก๋Š” ๊ฒƒ์ด๋‹ค!

๊ทธ๋ž˜์„œ ์˜ˆ์™ธ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•ด๋ฒ„๋ ธ๋‹ค...

์ฒ˜์Œ์—๋Š” ์ฝ”๋“œ ์˜ค๋ฅ˜์ธ ์ค„ ์•Œ๊ณ  ๋„ˆ๋ฌด ์ดํ•ด๊ฐ€ ์•ˆ ๋˜์–ด์„œ ์šฐํ…Œ์ฝ”์— ๋ฌธ์˜๊นŒ์ง€ ๋„ฃ์–ด๋ด์•ผ ํ•˜๋‚˜...? ์‹ถ์—ˆ๋Š”๋ฐ ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ์ž˜๋ชป๋œ ๊ฑฐ์˜€๋‹ค...

 

์‚ฌ์‹ค ์ƒ๊ฐ์„ ์ „ํ™˜ํ•ด๋ณด๋ฉด ๊ฐ„๋‹จํ•˜๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์‹คํŒจํ•œ ์ด์œ  = ์˜ˆ์™ธ๊ฐ€ ๋˜์ ธ์ ธ์„œ.

์˜ˆ์™ธ๊ฐ€ ๋˜์ ธ์ง„๋‹ค = ์–ด๋”˜๊ฐ€์—์„œ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ „ํŒŒ๋˜์–ด์„œ ์‹œ์Šคํ…œ ์ข…๋ฃŒ ์‹œ์ ๊นŒ์ง€ ๊ณ„์† ๋˜์ ธ์ง„ ๊ฒƒ. 

= ๊ทธ๋ ‡๋‹ค๋ฉด ์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ ์‹œ์Šคํ…œ์ด ์ •์ƒ ์ข…๋ฃŒ๋˜๋„๋ก ํ•˜์ž!

 

- ๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—๋Š” try catch๋ฌธ์„ ๊ทธ๋ƒฅ ์—ฌ๊ธฐ๋‹ค๊ฐ€ ๋ฐ”๋กœ ๋ฐ•์•˜๋‹ค. (์ง€๊ธˆ์€ ์ˆ˜์ •ํ•ด์„œ ์ €๋ ‡์ง€๋งŒ)

- ๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํ…Œ์ŠคํŠธ๋Š” ์ •์ƒ ํ†ต๊ณผํ•˜์ง€๋งŒ... ์ด ์ดํ›„ ๋กœ์ง์ด ์‹คํ–‰์ด ๋œ๋‹ค๋Š” ์ ์ด๋‹ค. catch๋กœ ์žก๊ณ  ์‹œ์Šคํ…œ์„ ์ข…๋ฃŒ์‹œ์ผœ์ค˜์•ผ ํ•˜๋Š”๋ฐ System.exit๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฝ˜์†” ์ถœ๋ ฅ๋„ ์‚ฌ์‹ค System.out์œผ๋กœ ์ง์ ‘ ํ•˜๋Š” ์‚ฌํƒœ๊นŒ์ง€ ๋ฒŒ์–ด์กŒ๋‹ค. ์ €๊ธฐ ๋‚ด๋ถ€์— ๋„ฃ์–ด๋†“๊ณ . ใ…‹ใ…‹ใ…‹ใ…‹

 

'์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ์ •์ƒ ์ข…๋ฃŒ์‹œ์ผœ๋ผ' << ์ด ๋ง์ด ์ง„์งœ ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

์•„๋‹ˆ... ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์ •์ƒ ์ข…๋ฃŒ๋ฅผ...?

 

- ๊ทธ๋ž˜์„œ... ๋˜ ๋‹ค์‹œ ์‚ฝ์งˆ์„ ํ–ˆ๋‹ค!!!! ๋””๋ฒ„๊น… ํ•˜๋‚˜์”ฉ ์ฐ์–ด๋ณด๋ฉด์„œ..... ใ… 

- ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‚˜์˜จ ์ฝ”๋“œ! ์•„๋งˆ ์š”๊ตฌ์‚ฌํ•ญ๋„ ์ด๋Ÿฐ ๊ฒŒ ์•„๋‹ˆ์—ˆ์„๊นŒ ์‹ถ๋‹ค.

getPurchaseInfo() -> ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๋ฐ›๊ณ , ๊ฒ€์ฆ ๋กœ์ง์„ ํƒ€๋ฉด์„œ 1000j๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒƒ์ด๋‹ค.

์˜ˆ์™ธ๋Š” ๊ณ„์† ํƒ€๊ณ ํƒ€๊ณ  ์˜ฌ๋ผ์˜ฌ ๊ฒƒ์ด๊ณ , ๋ฉ”์ธ ๋กœ์ง๊นŒ์ง€ ์™”์„ ๋•Œ try-catch์— ์˜ํ•ด์„œ ์˜ˆ์™ธ๋Š” ์žกํžˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ์ถœ๋ ฅ์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค! ์˜ˆ์™ธ์— ๋‹ด์•˜๋˜ ๊ฑธ e.getMessage()๋กœ ๊บผ๋‚ด์ฃผ๊ณ , ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ›„ ์ •์ƒ ์ข…๋ฃŒ๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ > ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ > ์ •์ƒ ์ข…๋ฃŒ ์ด ๋กœ์ง์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋งŒ์กฑํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋ฒˆ ์ฃผ์ฐจ ๊ณผ์ œ์—์„œ ์—„์ฒญ ์‚ฝ์งˆํ–ˆ๋˜ ๋ถ€๋ถ„์ธ๋ฐ ์ž˜ ์ฒ˜๋ฆฌํ•œ ๊ฒƒ ๊ฐ™์•„์„œ ๋ฟŒ๋“ฏํ–ˆ๋‹ค...ใ…Žใ…Ž

์•ž์œผ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋Š” ์ง„์งœ ๊ผญ ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ๋‹ค์งํ–ˆ๋‹ค...

 


| ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ

 - ์ €๋ฒˆ ์ฃผ์ฐจ์—์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋„ˆ๋ฌด ์‹ ๊ฒฝ์“ฐ์ง€ ๋ชปํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์•„์„œ ์ด๋ฒˆ ์ฃผ์ฐจ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์งฐ๋‹ค.

ํŠนํžˆ, private๋กœ ๊ตฌํ˜„๋œ ๊ฑฐ์— ๋Œ€ํ•ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ > public์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋Š”๋ฐ

๋‹ค ๊ตฌํ˜„ํ•˜๊ณ  ๋‚˜์„œ ์•Œ์•„๋ณด๋‹ˆ๊นŒ private ๋ฉ”์„œ๋“œ๋Š” ํ…Œ์ŠคํŠธ ์•ˆ ํ•˜๋Š” ๊ฒŒ ๋งž๋‹ค๊ณ  ํ•œ๋‹ค... ใ… 

์™œ๋ƒ๋ฉด private๋Š” ๋‹จ๋…์œผ๋กœ ์–ด์ฐจํ”ผ ์‹คํ–‰๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ˆ๊นŒ, public์„ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒŒ ๋งž๋‹ค๊ณ  ํ•œ๋‹ค.

 

- ์ง€๊ธˆ ์ด ๋ฆฌํ”Œ๋ ‰์…˜์˜ ํ–ฅ์—ฐ์„ ๋ณด๊ณ  ์žˆ์œผ๋‹ˆ ๋‹ค์‹œ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ˆ ๋˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋ชฐ๋ ค์˜จ๋‹ค.. ใ…Žใ…Ž

- ๋‹ค์Œ ์ฃผ์ฐจ์—์„œ๋Š” ์ผ€์ด์Šค๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ํ•ด์„œ public ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ํ•ด์•ผ๊ฒ ๋‹ค...!

๊ทธ๋ž˜๋„ ๋ฆฌํ”Œ๋ ‰์…˜์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์€ ์‹œ๊ฐ„์ด์—ˆ๋‹ค.

 

- ์ด๊ฑด ๊ทธ๋ƒฅ ๋ณด๋„ˆ์Šค๋กœ... ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ผ€์ด์Šค๋ฅผ ์ง„์งœ ์—„์ฒญ ๊ณ ๋ฏผํ•˜๋ฉด์„œ ์งฐ์—ˆ๋Š”๋ฐ ๋‹ค ํ†ต๊ณผ๋˜๊ณ  ๋‚˜์„œ ์—„์ฒญ ๋ฟŒ๋“ฏํ–ˆ๋‹ค. ใ…‹ใ…‹ใ…‹ใ…‹

- ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ์— ์ €๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ assertThat ์žˆ๋Š” ๊ฒŒ ๋ณ„๋กœ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์ด๋ฒˆ ์ฃผ ์Šฌ๋ž™ ํ™•์ธํ•˜๋‹ˆ๊นŒ ์–ด๋–ค ๋ถ„์ด .as๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค๊ณ  ํ•˜์…”์„œ ๋‹ค์Œ ์ฃผ์ฐจ์—๋Š” as๋ฅผ ํ†ตํ•ด description์„ ์ž‘์„ฑํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. 

- ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜์ด ๋˜๊ฒŒ ๋‹ค์–‘ํ•˜๋˜๋ฐ, ๋‹ค์Œ ์ฃผ์ฐจ์—์„œ๋Š” ๊ทธ ๋ถ€๋ถ„๋„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•ด๋ด์•ผ๊ฒ ๋‹ค! ํŠนํžˆ command() ๋ฉ”์„œ๋“œ ์žฌํ™œ์šฉ ๋Œ€์‹ ์— @ValueSource์™€ @ParameterizedTest๋ฅผ ํ™œ์šฉํ•ด์„œ ํ•ด์•ผ๊ฒ ๋‹ค... ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ค‘๋ณต๋„ ์—†์• ๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ˆ๊นŒ!

 

ํ—˜๋‚œํ–ˆ๋˜ 3์ฃผ์ฐจ... 4์ฃผ์ฐจ ๋ฏธ์…˜ ์—„์ฒญ ์–ด๋ ต๋˜๋ฐ ๋ฒŒ์จ ๊ธด์žฅ๋œ๋‹ค... ใ… 

ํŠนํžˆ 3์ฃผ์ฐจ ํ”ผ๋“œ๋ฐฑ์€ ๋„ˆ๋ฌด ๋ฐฐ์šด ์ ์ด ๋งŽ์•„์„œ 4์ฃผ์ฐจ ์—ด์‹ฌํžˆ ๋‹ฌ๋ ค๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰๊นŒ์ง€ ํŒŒ์ดํŒ… ใ… _ใ… ...!!!

 

 

Comments