๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ณต๋ถ€/์šฐ์•„ํ•œํ…Œํฌ์บ ํ”„Pro

[์šฐ์•„ํ•œํ…Œํฌ์บ ํ”„Pro 2๊ธฐ] 1์ฃผ์ฐจ ๋ฏธ์…˜ ํšŒ๊ณ 

by applemango2021 2021. 8. 1.

1์ฃผ์ฐจ์˜ ์ฃผ์ œ๋Š” TDD์˜€๊ณ , ๋ฏธ์…˜์€ ๋ฌธ์ž์—ด ๊ณ„์‚ฐ๊ธฐ์™€ ๋กœ๋˜ ๊ฒŒ์ž„์ด์—ˆ๋‹ค. ๋ฌธ์ž์—ด ๊ณ„์‚ฐ๊ธฐ๋Š” ์‚ฌ์‹ค์ƒ ๋ชธํ’€๊ธฐ์™€ ๊ฐ™์€ ๋Š๋‚Œ์ด์—ˆ๊ธฐ์—, ๋กœ๋˜ ๊ฒŒ์ž„์„ ํ•˜๋ฉด์„œ ๋” ๋งŽ์€ ํ”ผ๋“œ๋ฐฑ๊ณผ ๊นจ๋‹ฌ์Œ์„ ์–ป์—ˆ๋‹ค. 

 

๋ฏธ์…˜์˜ ์š”๊ตฌ์‚ฌํ•ญ

ํ”„๋ฆฌ์ฝ”์Šค ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•ด๋‹น ๋ฏธ์…˜์˜ ๊ธฐ๋Šฅ์ ์ธ ์š”๊ตฌ์‚ฌํ•ญ์€ ์–ด๋ ต์ง€ ์•Š์•˜์ง€๋งŒ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์š”๊ตฌ์‚ฌํ•ญ์ด ๋‚  ์ •๋ง ํž˜๋“ค๊ฒŒ ํ–ˆ๋‹ค. ์š”๊ตฌ์‚ฌํ•ญ ์ค‘์—๋Š” ์•„๋ž˜ ์•ค์†”๋กœ์ง€์˜ ๊ฐ์ฒด์ง€ํ–ฅ ์ƒํ™œ ์ฒด์กฐ 9๊ฐ€์ง€ ์ง€์นจ๊ณผ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„๋“ค์ด ์žˆ๋‹ค. 

ใ†ํ•œ ๋ฉ”์„œ๋“œ์— ์˜ค์ง ํ•œ ๋‹จ๊ณ„์˜ ๋“ค์—ฌ์“ฐ๊ธฐ๋งŒ ํ•œ๋‹ค.

ใ†else ์˜ˆ์•ฝ์–ด๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. 

ใ†ํ•œ ์ค„์— ์ ์„ ํ•˜๋‚˜๋งŒ ์ฐ๋Š”๋‹ค. 

 

๋ฏธ์…˜์— ๋ช…์‹œ๋œ ์š”๊ตฌ์‚ฌํ•ญ ์ด์™ธ์—๋„ ๋‚ด๊ฐ€ ๊ฐœ์ธ์ ์œผ๋กœ ์„ธ์› ๋˜ ๋ชฉํ‘œ๋Š” 'MVC ํŒจํ„ด์— ๋งž๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณด์ž' ์˜€๋‹ค. ์ง€๊ธˆ ์™€์„œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ํŠน๋ณ„ํ•œ ๋ชฉํ‘œ๋‚˜ ์ด์œ ๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฑด ์•„๋‹ˆ์—ˆ๋‹ค. ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌด์˜์‹์ ์œผ๋กœ MVC ํŒจํ„ด์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์œ ์ง€๋ณด์ˆ˜์—๋„ ์šฉ์ดํ•˜๊ณ (์œ ์ง€๋ณด์ˆ˜ ํ•  ์ผ์€ ์—†๊ฒ ์ง€๋งŒ ๊ทธ๋ž˜๋„ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด!) ๊ฐ ๊ฐ์ฒด๋“ค์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๊ธฐ์— ์šฉ์ดํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. 


1์ฃผ์ฐจ ๋ฏธ์…˜์„ ์™„์ˆ˜ํ•˜๋Š”๋ฐ ๊ฑธ๋ ธ๋˜ ์‹œ๊ฐ„์€ ๋Œ€๋žต 1์ฃผ์ผ ์ •๋„์˜€๋‹ค. ํ‡ด๊ทผํ•˜๊ณ  ๋‚˜์„œ ์ตœ์†Œ 2~4์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ณ , ์ฃผ๋ง ์ดํ‹€ ๋‚ด๋‚ด ๋ฏธ์…˜์—๋งŒ ์ง‘์ค‘ํ–ˆ๋˜ ๊ฑธ ๊ฐ์•ˆํ•˜๋ฉด ์ •๋ง ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค. ์ง€๊ธˆ์™€์„œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ด ๋ฏธ์…˜์ด ์–ด๋ ต๊ฒŒ ๋Š๊ปด์กŒ๋˜ ๋ฐ์—๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์—ˆ๋‹ค. 

 

์ฒซ ๋ฒˆ์งธ ์ด์œ  : MVC ํŒจํ„ด์„ ์ž˜ ๋ชฐ๋ž๋‹ค

์ •ํ™•ํžˆ ๋งํ•˜์ž๋ฉด ๊ฐ ๊ฐ์ฒด๋“ค์˜ ์—ญํ• ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๊ตฌ๋ถ„์„ ์ง“์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ์ˆ˜์ •์ด ์žฆ์•˜๋‹ค.

 

์ดˆ๋ฐ˜์˜ Application๊ณผ LottoController์˜ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์•˜๋‹ค. ์ด๋•Œ ๋‹น์‹œ์—๋Š” Application์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง„์ž…์ ์˜ ์—ญํ• ๋งŒ ํ•˜๊ณ , LottoController๊ฐ€ ์ •๋ง ๋ชจ๋“  ๊ฒƒ์„ ์ปจํŠธ๋กคํ•˜์ž!๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค. ํ‹€๋ฆฐ ์ƒ๊ฐ์ด๋ผ๊ณ ๋Š” ํ•  ์ˆ˜ ์—†์ง€๋งŒ, ๋”ฑํžˆ ๊นŠ์€ ์ƒ๊ฐ ๋์— ๋‚ด๋ฆฐ ๊ฒฐ๋ก ์€ ์•„๋‹ˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์š”๊ตฌ์‚ฌํ•ญ์ด ์ถ”๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ๊ณ„์† ์šฐ์™•์ขŒ์™•ํ–ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค. ์ปค๋ฐ‹ ์ด๋ ฅ์—๋Š” ๋‚จ์ง€ ์•Š์•˜์ง€๋งŒ, Application์—์„œ ๋ชจ๋“  ๊ฐ์ฒด(InputView, Controller, LottoTickets)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ”๋‹ค๊ฐ€ ๋‹ค์‹œ ๋กค๋ฐฑํ•œ ์ ๋„ ์žˆ๊ณ ...์—ฌํŠผ ํ˜ผ์ž์„œ ์‚ฝ์งˆ์„ ์ •๋ง ๋งŽ์ด ํ–ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์—ญํ• ์ด ์ž˜ ์ •์˜๋˜์—ˆ๋‹ค๋ฉด ๊ทธ ์ •๋„๊นŒ์ง€๋Š” ์•„๋‹ˆ์—ˆ์„ ๊ฑฐ๋ผ๊ณ  ํ™•์‹ ํ•œ๋‹ค.

 Application ์ฝ”๋“œ : Controller ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์—ญํ• ๋งŒ ํ•œ๋‹ค

๊ฒŒ๋‹ค๊ฐ€ ์ดˆ๋ฐ˜์˜ LottoController ์ฝ”๋“œ์—์„œ๋Š” View์™€ Model์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋“ค์„ ๋ชจ๋‘ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ฆฌ๋ทฐ์–ด๋‹˜์˜ ํ”ผ๋“œ๋ฐฑ ๋•๋ถ„์— ์ตœ์ข… ์ฝ”๋“œ์—์„œ๋Š” View์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋“ค๋งŒ ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ์‚ฌ์‹ค ๊ทธ ๋งˆ์ €๋„ ์กฐ๊ธˆ ์•„์‰ฌ์šด ๋Š๋‚Œ์€ ๋“ ๋‹ค. 

Controller์—์„œ View์™€ Model์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ „๋ถ€ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค

์ง€๊ธˆ ๋‹ค์‹œ ๊ฐœ๋ฐœํ•œ๋‹ค๋ฉด Controller์˜ ์—ญํ• ์„ ์กฐ๊ธˆ ๋” ๋ช…ํ™•ํžˆ ์„ค์ •ํ•˜๊ณ  ์‹œ์ž‘ํ•  ๊ฒƒ ๊ฐ™๋‹ค. MVC ํŒจํ„ด์—์„œ Controller์˜ ์—ญํ• ์€ Model๊ณผ View ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๊ฐ€ ๋˜์–ด์ฃผ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. Model๊ณผ View ์‚ฌ์ด์—์„œ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๊ตณ์ด Model ๋ฐ View ๊ฐ์ฒด๋“ค์„ ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์„ ํ•„์š”๋Š” ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค. 

 

์ฒ˜์Œ ๊ฐœ๋ฐœํ•  ๋•Œ์—๋„ ์œ„ ์ƒ๊ฐ์„ ์•ˆ ํ–ˆ๋˜ ๊ฑด ์•„๋‹ˆ๋‹ค. ๊ตณ์ด Controller์—์„œ View ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•˜๋‚˜? ์ƒ๊ฐํ–ˆ์ง€๋งŒ, Controller์—์„œ View ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋ฉด Application์—์„œ View ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ   ์žˆ์–ด์•ผ ํ–ˆ๋‹ค. ๊ทผ๋ฐ ๊ทธ๊ฒŒ ๊ดœํžˆ ์ฐ์ฐํ–ˆ๋‹ค. ์ง„์ž…์ ์— main ๋ฉ”์†Œ๋“œ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“  ๋‹ค๋Š” ๊ฒŒ ์ข€ ๊ทธ๋žฌ๋Š”๋ฐ, ์™œ ์ข€ ๊ทธ๋Ÿฐ์ง€๋Š” ์ง€๊ธˆ๋„ ์„ค๋ช…์„ ๋ชปํ•˜๊ฒ ๋‹ค. ์–ด๋””์—์„œ ๊ทผ์›ํ•œ ์ฐ์ฐํ•จ์ผ๊นŒ?


๋‘ ๋ฒˆ์งธ ์ด์œ  : ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ์–ด๋Š ๋ ˆ์ด์–ด์—์„œ ์–ด๋Š ์ •๋„๊นŒ์ง€ ํ•ด์•ผํ•  ์ง€ ๊ฒฐ์ • ๋‚ด๋ฆฌ๊ธฐ๊ฐ€ ์–ด๋ ค์› ๋‹ค 

 

์ผ๋ฐ˜ ์„ธ๊ณ„์—์„œ์˜ ๋กœ๋˜ ๋ฒˆํ˜ธ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ๋ฒˆํ˜ธ๋Š” ๋ฌด์กฐ๊ฑด 1๋ถ€ํ„ฐ 45๊นŒ์ง€๋งŒ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ๋กœ๋˜ ๋ฒˆํ˜ธ ๊ฐ’์„ ์ž…๋ ฅํ•  ๋•Œ ์ˆซ์ž๋งŒ ์ž…๋ ฅํ•˜๋ฆฌ๋ผ๋Š” ๋ณด์žฅ์ด ์—†๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•œ๋‹ค๊ณ  ํ•ด๋„ 1๋ถ€ํ„ฐ 45 ์‚ฌ์ด์˜ ์ˆซ์ž๋งŒ ์ž…๋ ฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์—†๋‹ค. ์ŠคํŽ˜์ด์Šค๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜๋„ ์žˆ๊ณ , ํ•œ๊ธ€ ํ˜น์€ ์˜์–ด ํ˜น์€ ํŠน์ˆ˜๊ธฐํ˜ธ๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋ฅผ ๊ฒ€์ฆํ•ด์•ผ ํ•œ๋‹ค. 

 

1) ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆซ์ž์ธ๊ฐ€?

2) ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆซ์ž๋ผ๋ฉด ๋ฒ”์œ„(1~45) ๋‚ด์˜ ์ˆซ์ž์ธ๊ฐ€?

 

๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋Š” ๋‚ด๋‚ด 1๋ฒˆ๊ณผ 2๋ฒˆ์˜ ๊ฒ€์ฆ์„  View์—๊ฒŒ ๋งก๊ธธ ๊ฒƒ์ธ๊ฐ€ Model์—๊ฒŒ ๋งก๊ธธ ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ฒฐ์ •์ง“์ง€ ๋ชปํ•ด ๋งŽ์ด ํ—ค๋งธ๋‹ค. ๋ฌผ๋ก  ์ง€๊ธˆ์€ ๊ทธ ๊ธฐ์ค€์„ ์กฐ๊ธˆ์€ ์‰ฝ๊ฒŒ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ๋Š” ๊ด€๊ณ„์—†์ด, ์ˆซ์ž๋ผ๋ฉด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  1๋ฒˆ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์€ View์—๊ฒŒ ๋งก๊ธฐ๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ํ•ด๋‹นํ•˜๋Š” 2๋ฒˆ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์€ Model์—๊ฒŒ ๋งก๊ธธ ๊ฒƒ์ด๋‹ค. 

 

ํ•˜์ง€๋งŒ ์ฒ˜์Œ ๋ฏธ์…˜์„ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ๋งŒ ํ•ด๋„ ์ด ๊ธฐ์ค€์„ ์ •ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์› ๋‹ค. ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•ด์„œ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ๋ฌด์กฐ๊ฑด์ ์ธ ๋‹ต์ด ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์–ด์จŒ๋“  ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋„ ๋ฆฌ๋ทฐ์–ด๋‹˜๊ป˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๊ณ , ์ตœ์ข… ์Šคํ…์—์„œ๋Š” 1๋ฒˆ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์˜ ์ฑ…์ž„์€ View์—๊ฒŒ, 2๋ฒˆ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์˜ ์ฑ…์ž„์€ Model์—๊ฒŒ ์œ„์ž„ํ•˜์˜€๋‹ค. 

 

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ๋‚˜๋‹ˆ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์ด ๋” ๋ณต์žกํ•ด์กŒ๋‹ค. View๋ถ€ํ„ฐ Controller, ๊ทธ๋ฆฌ๊ณ  Model ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ '์ง€์†์ ์œผ๋กœ'  ํ˜‘๋ ฅํ•ด์•ผ ํ•˜๋Š” ๋กœ์ง์ด ๋˜์–ด ๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

'์ง€์†์ ์œผ๋กœ ํ˜‘๋ ฅ'ํ•œ๋‹ค๋Š” ๋ง์ด ์• ๋งคํ•  ์ˆ˜ ์žˆ์–ด ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด, View์—๋‹ค๊ฐ€ 1๋ฒˆ๊ณผ 2๋ฒˆ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋ฆฌ๊ณ  ์ด๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๋˜ ๋ฒˆํ˜ธ๋กœ 100์„ ์ž…๋ ฅํ–ˆ๋‹ค. InputView์—์„œ๋Š” 100์ด ์ˆซ์ž ๊ฐ’์—๋Š” ํ•ด๋‹นํ•˜์ง€๋งŒ(=1๋ฒˆ ๊ฒ€์ฆ์€ ํ†ต๊ณผํ•˜์ง€๋งŒ) 45๋ณด๋‹ค ํฐ ์ˆซ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ์ด ์ž˜๋ชป๋˜์—ˆ์Œ์„ ๊ฐ์ง€ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฐ”๋กœ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋‚ด๋ฑ‰๊ฒŒ ๋˜๊ณ , ์ดํ›„ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์„ ์ž…๋ ฅํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๋žต ์•„๋ž˜์™€ ๊ฐ™์ดwhile๋ฌธ์„ ํ†ตํ•ด ์ž…๋ ฅ์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค. (์•„๋ž˜ ์˜ˆ์‹œ์—์„œ๋Š” Integer์ธ์ง€๋งŒ ๊ฒ€์ฆํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ์ˆซ์ž ๋ฒ”์œ„๊นŒ์ง€ ๊ฒ€์ฆํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋น„์Šทํ•œ ํ˜•ํƒœ์ผ ๊ฑฐ๋‹ค).

 

ํ•˜์ง€๋งŒ 1๋ฒˆ ์œ ํšจ์„ฑ ๊ฒ€์ฆ๊ณผ 2๋ฒˆ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์˜ ์ฑ…์ž„์„ ๊ฐ๊ฐ View์™€ Model์—๊ฒŒ ์œ„์ž„ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์ด๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ 100์„ ์ž…๋ ฅํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. View ์ž…์žฅ์—์„œ๋Š” 100์ด ์ˆซ์ž๊ฐ’์— ํ•ด๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ํ†ต๊ณผ์‹œํ‚ค๊ณ  Controller์—๊ฒŒ ์ˆซ์ž๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Controller์—์„œ๋Š” ์ด์ œ Model์—๊ฒŒ ์ˆซ์ž 100์„ ์ „๋‹ฌํ•˜๋Š”๋ฐ, Model์—์„œ๋Š” ์ˆซ์ž 100์ด ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ๋‹ค.  ์ด์ œ Model์—์„œ๋Š” Exception์„ ํ†ตํ•ด Controller์—๊ฒŒ ์ด ์‚ฌ์‹ค์„ ์•Œ๋ฆฌ๊ฒŒ ๋˜๊ณ , Controller์—์„œ๋Š” OutputView๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด ์‚ฌ์‹ค์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฐ๋‹ค. ๊ทธ๋ฆฌ๊ณ  InputView ๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ๋“ค์–ด์˜ฌ ๋•Œ๊นŒ์ง€ ์ด ์‚ฌ์ดํด์„ ๋ฌด์ˆ˜ํžˆ ๋ฐ˜๋ณตํ•ด์•ผ ํ•œ๋‹ค.

LottoController์—์„œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ˆ˜๋™ ๋กœ๋˜๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ๋กœ์ง

 

์ฆ‰,  ์œ„ ์ฝ”๋“œ์˜ ์ฒซ๋ฒˆ์งธ์™€ ๋‘๋ฒˆ์งธ ๋…ธ๋ž€์ƒ‰ ๋ฐ•์Šค์™€ ๊ฐ™์ด Controller ๋‹จ์—์„œ๋„ while๋ฌธ์„ ํ†ตํ•ด ๊ณ„์† ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๊ณ , ๋งˆ์ง€๋ง‰ ์„ธ ๋ฒˆ์งธ ๋ฐ•์Šค์˜ ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ๋„ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฏธ์…˜์„ ํ•  ๋‹น์‹œ์—๋Š” ์ด๋ ‡๊ฒŒ '๊ฒ€์ฆ'์ด๋ผ๋Š” ํ–‰์œ„์— ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ฐธ์—ฌํ•˜๋Š” ๊ฒŒ ๋˜๊ฒŒ ์–ด์ƒ‰ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งŒ์•ฝ View ๊ฐ์ฒด๋“ค์„ Controller๊ฐ€ ์•„๋‹Œ Application์— ์ƒ์„ฑํ•œ๋‹ค๋ฉด Application์˜ main ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋˜ ๋‹ค์‹œ ์ฒซ๋ฒˆ์งธ ์ด์œ ๋กœ ํšŒ๊ท€ํ•˜๋Š” ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์ด ์žˆ๋Š”๋ฐ, ์–ด์จŒ๋“  Application์˜ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๋Š” ๊ฒŒ ๊บผ๋ ค์กŒ๋‹ค. ๋‚ด๊ฐ€ ์˜ค ใ…๊ทธ๋ ‡๊ฒŒ ๋Š๋ผ๋Š”์ง€ ์ œ๋ฐœ ๊ทธ ์ด์œ ๋ฅผ ์ฐพ๊ณ  ์‹ถ๋‹ค.  

 

์ง€๊ธˆ์— ์™€์„œ ๋‹ค์‹œ ๋ณด๋‹ˆ ๋‹จ์ˆœํžˆ ์œ ํšจ์„ฑ์„ '๊ฒ€์ฆ'ํ•˜๋Š” ๊ฒƒ์—์„œ ๋๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ด ์‚ฌ์‹ค์„ ์‚ฌ์šฉ์ž์—๊ฒŒ '์•ˆ๋‚ด'ํ•˜๊ณ  ๋‹ค์‹œ ์ž…๋ ฅ์„ ๋ฐ›์•„์•ผ ํ•˜๋‹ˆ View์™€ Controller, ๊ทธ๋ฆฌ๊ณ  Model์ด ๋ชจ๋‘ ์ฐธ์—ฌํ•  ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 


์„ธ ๋ฒˆ์งธ ์ด์œ  : ํ•œ ๋‹จ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํž˜๋“ค์—ˆ๋‹ค 

์—ฌ๋Ÿฌ ์š”๊ตฌ์‚ฌํ•ญ ์ค‘ ๋‚  ๊ฐ€์žฅ ๊ดด๋กญ๊ฒŒ ํ–ˆ๋˜ ๊ฑด 'ํ•œ ๋ฉ”์„œ๋“œ์— ์˜ค์ง ํ•œ ๋‹จ๊ณ„์˜ ๋“ค์—ฌ์“ฐ๊ธฐ๋งŒ ํ•œ๋‹ค.' ์˜€๋‹ค. ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ง์ ‘์ ์œผ๋กœ ํ’€์–ด์“ฐ์ž๋ฉด, for๋ฌธ์ด๋‚˜ while ๋ฌธ ์•ˆ์— if๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ•˜๋ƒ? if๋ฌธ์„ ์š”๊ตฌํ•˜๋Š” ๋กœ์ง์€ ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.

 

๊ต‰์žฅํžˆ ์‰ฌ์šด ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ๊ฐ™์ง€๋งŒ, ์˜์™ธ๋กœ ์–ด๋ ต๋‹ค. ๊ทธ ๋™์•ˆ ๋‚ด๊ฐ€ ๋„ˆ๋ฌด ์ ˆ์ฐจ์ง€ํ–ฅ์ ์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•ด์™”๋‚˜ ์‹ถ์œผ๋ฉด์„œ๋„ ์†”์งํžˆ ๊ฐ€๋”์€ '์•„ ์ง„์งœ ์ด๋ ‡๊ฒŒ๊นŒ์ง€ ํ•ด์•ผ ๋ผ?'๋ผ๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ๋‹ค. ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„๋ฆฌ๋Š” ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ทธ๋ ‡๊ฒŒ ๋ถ„๋ฆฌํ•œ ๋ฉ”์†Œ๋“œ๋Š” ์ •๋ง ๊ทธ๋ƒฅ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•œ ๊ฒƒ ์ด์™ธ์—๋Š” ์˜๋ฏธ๊ฐ€ ์—†์–ด๋ณด์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌผ๋ก  ์ง€๊ธˆ์€ else๋ฅผ ๋ณด๋ฉด ๋‚˜๋„ ๋ชจ๋ฅด๊ฒŒ '์•„ ์ข€ ์–ด์ƒ‰ํ•œ๋ฐ...' ํ•  ์ •๋„๋กœ ์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ํ•œ ๋‹จ๊ณ„ ๋“ค์—ฌ์“ฐ๊ธฐ์— ์ต์ˆ™ํ•ด์ ธ๋ฒ„๋ ธ๊ณ , ์ด๋ ‡๊ฒŒ ๋นก์„ธ๊ฒŒ ์—ฐ์Šตํ•จ์œผ๋กœ์จ ์–ป๋Š” ์ด์ ๋„ ๋Š๊ผˆ๋‹ค. 

์Šต๊ด€์ ์œผ๋กœ else๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์ „์— 'ํ˜น์‹œ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์„๊นŒ?' ์ƒ๊ฐํ•ด๋ณด๊ฒŒ ๋๊ณ , ๊ตณ์ด else๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋น ๋ฅด๊ฒŒ returnํ•ด๋„ ๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. 


์–ด์ฉŒ๋‹ค ๋ณด๋‹ˆ ์ฒซ๋ฒˆ์งธ ํšŒ๊ณ ๊ฐ€ ๋„˜ ๊ธธ์–ด์ ธ๋ฒ„๋ ธ๋Š”๋ฐ, ์‚ฌ์‹ค ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋“  ์˜จ๊ฐ– ๊ณ ๋ฏผ๊ณผ ์žก์ƒ๊ฐ์˜ ๋ฐ˜์—๋ฐ˜์—๋ฐ˜๋„ ์•ˆ ๋œ๋‹ค. ์ด ๋ฏธ์…˜ ๋•๋ถ„์— ์˜ค๋žœ๋งŒ์— ์ž๋ฐ”๋กœ ๊ฐœ๋ฐœํ•ด๋ณด๊ธฐ๋„ ํ–ˆ๊ณ , ์ฒ˜์Œ์œผ๋กœ TDD๋ผ๋Š” ๊ฑธ ํ•ด๋ณด๊ธฐ๋„ ํ–ˆ์–ด์„œ(ํ•˜์ง€๋งŒ TDD๋ฅผ ํ–ˆ๋‹ค๊ณ  ๋งํ•˜๊ธฐ ๋ถ€๋„๋Ÿฌ์šธ ์ˆ˜์ค€์˜ TDD์˜€๋‹ค) ๊ฐ€์žฅ ์• ์ฐฉ์ด ๊ฐ€๊ณ  ์•„์‰ฌ์›€๋„ ๋งŽ์ด ๋‚จ๋Š”๋‹ค.