๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ Front-End/JavaScript

[JS][์šฐํ…Œ์ฝ”] ํ”„๋ฆฌ์ฝ”์Šค 3์ฃผ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•œ KPTํšŒ๊ณ 

by Sun A 2024. 11. 6.

๊ธ€์˜ ๋ชฉํ‘œ

3์ฃผ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด 3์ฃผ์ฐจ์˜ ์ฝ”๋“œ๋ฅผ ๋˜๋Œ์•„๋ณด๊ณ  4์ฃผ์ฐจ๋ฅผ ์‹œ์ž‘ํ•ด๋ณผ ์ƒ๊ฐ์ด๋‹ค.

โ€ป ํ•ด๋‹น ๊ธ€์€ ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค์—์„œ ์˜ฌ๋ ค์ค€ 3์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์€ ํ”„๋ฆฌ์ฝ”์Šค ์ฐธ์—ฌ์ž๋“ค์—๊ฒŒ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ณต์œ ๋œ ๋งํฌ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ์ €๋Š” ํ•ด๋‹น ๋งํฌ๋Š” ๊ณต์œ ํ•  ์ˆ˜ ์—†๊ณ  ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์„ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์—์„œ์˜ ์ƒ๊ฐ๋“ค์„ ํ•ด๋‹น ๊ธ€์— ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

3์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ •์— ๋Œ€ํ•œ ํ›„๊ธฐ

3์ฃผ์ฐจ ํ•™์Šต ๋ชฉํ‘œ๋Š” ๊ด€๋ จ ํ•จ์ˆ˜๋“ค์„ ๋ฌถ์–ด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ์ด ๊ฐ์ฒด๋“ค์ด ํ˜‘๋ ฅํ•˜์—ฌ ํ•˜๋‚˜์˜ ํฐ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๋”๋ถˆ์–ด ํด๋ž˜์Šค์™€ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์˜๋„ํ•œ ๋Œ€๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ–ˆ๋‹ค. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ ‘๋‹จ์œ„’์˜ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์กฐ๊ธˆ ์–ด๋ ค์› ์ง€๋งŒ, ์ผ๋‹จ ์ฝ”๋“œ ์ž‘์„ฑ ์ค‘ ์ž์ž˜ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๋А๊ปด์ง€๋Š” ํ•จ์ˆ˜๋“ค์„ ํ•˜๋‚˜์”ฉ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ์ง„ํ–‰ํ–ˆ๋‹ค. ๊ทธ๋ž˜๋„ 2์ฃผ์ฐจ ๋•Œ๋Š” ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ์ œ๋Œ€๋กœ ์ž‘์„ฑํ•˜์ง€ ๋ชปํ–ˆ๋˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋“ค์ด ์ด๋ฒˆ์—๋Š” ์กฐ๊ธˆ ๋” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‹ค๊ฐ€์™€ ๋ฟŒ๋“ฏํ–ˆ๋‹ค. 1์ฃผ์ฐจ์—๋Š” npm run start๋ฅผ ๋ฌดํ•œ ๋ฐ˜๋ณตํ•˜๋ฉฐ ํ…Œ์ŠคํŠธํ–ˆ์—ˆ๋Š”๋ฐ, ์ด์ œ๋Š” ์ง์ ‘ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  npm run test๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๋ถ€๋ถ„๋งŒ ์ฐพ์•„ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค๋Š” ์ ์—์„œ ์Šค์Šค๋กœ ๊ฝค ๋ฐœ์ „ํ–ˆ๋‹ค๊ณ  ๋А๋‚€๋‹ค... ๐Ÿ˜ญ

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

์ฒ˜์Œ์—๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒŒ ์ข‹์„์ง€, ๋ถ„๋ฆฌํ•œ ํŒŒ์ผ๋“ค์„ ์–ด๋А ํด๋”์— ๋„ฃ์–ด์•ผ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ, ๊ทธ๋ ‡๊ฒŒ ์ฒด๊ณ„๋ฅผ ์žก์•„๊ฐ€๋Š” ๊ณผ์ •์ด ์ƒ๊ฐ๋ณด๋‹ค ์žฌ๋ฏธ์žˆ์—ˆ๋‹ค. ์›๋ž˜ ํฐ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๋ฌถ์–ด ์ •๋ฆฌํ•˜๋Š” ๊ฑธ ์ข‹์•„ํ•˜๋Š” ์„ฑํ–ฅ์ด๋ผ, ์ฝ”๋”ฉ์„ ํ•˜๋ฉด์„œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ด๊ฐ€๋Š” ๊ฒƒ๋„ ๊ฝค ํฅ๋ฏธ๋กœ์› ๋‹ค.

์ด์ œ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ์–ด๋А ์ •๋„ ์ต์ˆ™ํ•ด์กŒ๊ณ , ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์„œ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ๋ฌถ๊ณ , ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๊ฐ์ฒด๋กœ ์ธ์Šคํ„ด์Šคํ™”ํ•˜์—ฌ ์ด ๊ฐ์ฒด๋“ค์ด ํ˜‘๋ ฅํ•ด ํ•˜๋‚˜์˜ ํฐ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” controller๊นŒ์ง€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์€ 1, 2, 3์ฃผ ์ค‘ ์–ด๋А ํ•œ ์ฃผ๋ผ๋„ ์ œ๋Œ€๋กœ ์ง„ํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์–ป๊ธฐ ์–ด๋ ค์šด ๊ฒฐ๊ณผ์˜€๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋ฌผ๋ก  ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ๋Š” ์‰ฌ์šด ์ž‘์—…์ผ ์ˆ˜ ์žˆ๊ณ , ์ด๋ฏธ 1์ฃผ์ฐจ๋ถ€ํ„ฐ ๊ทธ ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์ง„ํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋„ ์žˆ์—ˆ๊ฒ ์ง€๋งŒ, 1์ฃผ์ฐจ์— App.js์— ์ ˆ์ฐจ ์ง€ํ–ฅ์ ์œผ๋กœ๋งŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋˜ ๋‚˜์—๊ฒŒ๋Š” ์ง€๊ธˆ์˜ ์„ฑ์žฅ์ด ๊ต‰์žฅํžˆ ํฌ๊ฒŒ ๋‹ค๊ฐ€์˜จ๋‹ค.

 

๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ ํ™•์ธ

[ ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ) ๋ผ์ธ์— ๋Œ€ํ•œ ๊ธฐ์ค€๋„ ์ ์šฉํ•œ๋‹ค ]

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

 ํ•ด๋‹น ๊ธฐ์ค€์„ ์ ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ๋ถ„๋ฆฌ ๋˜๋Š” ํด๋ž˜์Šค ๋ถ„๋ฆฌ๋Š” ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์‚ฌํ•ญ์ด๋‹ค. 

[ ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•œ ๊ณ ๋ฏผํ•œ๋‹ค ]

 ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๋ชจ๋‘ ๊ณ ๋ คํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ๊ฒƒ์ด ์ •์ƒ์ ์ธ ์ƒํ™ฉ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์–ด๋ ต๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™๋‹ค.. ๋‚˜๋Š” 3์ฃผ์ฐจ์— ์•„์ฃผ ์น˜๋ช…์ ์ธ ์˜ˆ์™ธ ์ƒํ•ญ์„ ๋†“์ณค๋‹ค. ๋กœ๋˜ ๊ตฌ๋งค ๊ธˆ์•ก ์ž…๋ ฅ ์‹œ ์Œ์ˆ˜ ๊ฐ’์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ค ใ…  

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

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

(ํ˜น์‹œ ์ˆจ๊ฒจ์ง„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์Œ์ˆ˜ ์ž…๋ ฅ๊ฐ’์„ ๊ฑธ๋Ÿฌ๋‚ด์ง€ ๋ชปํ•˜์—ฌ ๋‚ด ๊ธฐ๋Šฅ์€ ์ž‘๋™์—์„œ ๋งˆ์ด๋„ˆ์Šค๋ฅผ ๋ฐ›๋Š” ๊ฑด ์•„๋‹๊นŒ..^^)

<์ €๋ฒˆ ์ฃผ์ฐจ ์˜ˆ์™ธ ์‚ฌํ•ญ>

  • ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก์— 1000 ์ดํ•˜์˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅ
  • ๋‹น์ฒจ ๋ฒˆํ˜ธ์— ์ค‘๋ณต๋œ ์ˆซ์ž๋ฅผ ์ž…๋ ฅ
  • ๋‹น์ฒจ ๋ฒˆํ˜ธ์— 1~45 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ˆซ์ž๋ฅผ ์ž…๋ ฅ
  • ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ์ค‘๋ณต๋œ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ

 

[ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ๋กœ์ง์˜ ๋ถ„๋ฆฌํ•œ๋‹ค ]

 ๊ต‰์žฅํžˆ.. ์‹ค์ˆ˜ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๋ˆ„๊ฐ€ ์•Œ๋ ค์ฃผ์ง€ ์•Š์œผ๋ฉด ๋ชจ๋ฅด๋Š” ๊ฒƒ์ธ๊ฐ€..ใ…  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ class์— UI ๋กœ์ง์„ ์—ด์‹ฌํžˆ ๋„ฃ์–ด์„œ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ์œ„๋ฐฐ๋œ ์ฝ”๋“œ๋ฅผ 3์ฃผ๊ฐ„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. UI ๋กœ์ง์€ ํ™”๋ฉด์— ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์ž…๋ ฅ์„ ๋ฐ›๋Š” ์—ญํ• ์„ ๋‹ด๋Š”๋‹ค. ๊ทธ๋ž˜์„œ View ํด๋ž˜์Šค์— ๋ณ„๋„๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค. MVC ํŒจํ„ด์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋‘๊ณ  ์ฐจ๋ก€๋Œ€๋กœ ํŒŒ์ผ์˜ ํ•„์š”์„ฑ์„ ํŒŒ์•…ํ•˜๋ฉด์„œ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ View์— ๋Œ€ํ•ด์„œ๋Š” ์ƒ๊ฐ ๋ชปํ–ˆ์—ˆ๋‹ค๋‹ˆ.. ์•„์‰ฌ์›€์ด ๋‚จ๋Š”๋‹ค.

๊ทธ๋ž˜๋„ ํ”ผ๋“œ๋ฐฑ ๋•๋ถ„์— ์•Œ๊ฒŒ๋œ ์‚ฌํ•ญ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜คํžˆ๋ ค ๋” ๊ธฐ์–ต์— ์˜ค๋ž˜ ๋‚จ์„ ๊ฒƒ ๊ฐ™๋‹ค. UI ๋กœ์ง๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ˜ผ์žฌํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์— ์œ„๋ฐฐ๋œ๋‹ค.! 

โ–ผ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ๋”๋ณด๊ธฐ (๋„ค์ด๋ฒ„ ์ง€์‹๋ฐฑ๊ณผ ์Šคํฌ๋žฉ)

 

[ ๊ฐ์ฒด์˜ ์ƒํƒœ ์ ‘๊ทผ์„ ์ œํ•œํ•œ๋‹ค ]

 ํ•„๋“œ๋Š” private class ํ•„๋“œ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ์ด์œ ๋ฅผ ๋ช…ํ™•ํžˆ ์ฐพ์ง€ ๋ชปํ•ด์„œ ๊ธฐ์กด์— ํ•˜๋˜๋Œ€๋กœ Lotto ํ•„๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํ•„๋“œ๋ฅผ public์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ด์ฏค๋ถ€ํ„ฐ.. ์Šฌ์Šฌ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์„ ์ฝ์œผ๋ฉด์„œ ๋ชจ๋“  ํ”ผ๋“œ๋ฐฑ์˜ ๋‚ด์šฉ์ด ๋‚ด ์ฝ”๋“œ์— ํฌํ•จ๋˜์–ด์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ธฐ๋ถ„์ด ๋“ค๋ฉด์„œ ์Šฌํސ๋‹ค..^^ ๋‚œ ์ •๋ง ๋™์ž‘๋งŒ ํ•˜๋Š” ํŠธ๋ ˆ์‰ฌ๋ฅผ ๋งŒ๋“  ๊ฒƒ์ธ๊ฐ€

๋Œ€์ถฉ 2๋ฒˆ์ด ๋‚ด ์ฝ”๋“œ์ผ๋“ฏ

ํ”„๋ผ์ด๋น— ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ์— ๋Œ€ํ•ด ์Šค์Šค๋กœ ์ฐพ์•„๋ณด๋ผ๋Š” ํ”ผ๋“œ๋ฐฑ์ด ์กด์žฌํ•˜์—ฌ ์ฐพ์•„๋ณด๊ณ  ๋ธ”๋กœ๊น…ํ•ด๋ณด์•˜๋‹ค..

https://sundery.tistory.com/222

 

[ ๊ฐ์ฒด๋Š” ๊ฐ์ฒด๋‹ต๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค ]

 ๋‚˜์˜ ๊ฐ์ฒด๋“ค์€ ๊ฐ์ฒด๋‹ค์› ๋Š”๊ฐ€ (No)

3์ฃผ์ฐจ ํŒŒ์ผ์— Lotto.js์— Lotto ๊ฐ์ฒด๋ž‘ numbers ํ”„๋ผ์ด๋น— ํ•„๋“œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทผ๋ฐ ์ด numbers ํ•„๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ž˜ ์จ์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ณ , ๊ทธ๊ฑธ๋กœ Lotto ํŒŒ์ผ ์•ˆ์˜ numbers ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ–ˆ๋‹ค. ์‚ฌ์‹ค Lotto ๊ฐ์ฒด ํŒŒ์ผ ์•ˆ์—์„œ numbers ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ , LottoGame ๊ฐ์ฒด์—์„œ Lotto๋ฅผ ๊ฐ€์ ธ์™€์„œ ์“ฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด์•ผ ํ–ˆ๋Š”๋ฐ, ๋‚˜๋Š” Lotto ๊ฐ์ฒด๋ฅผ ๊ทธ๋Ÿฐ ์กด์žฌ๋กœ ๋งŒ๋“ค์ง€ ๋ชปํ–ˆ๋‹ค.. ์˜คํžˆ๋ ค ์—‰๋šฑํ•œ ํŒŒ์ผ์— ๊ทธ๋Ÿฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋Š” ๊ฒƒ ;; 

์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ Bonus์™€ Lotto ๋ฒˆํ˜ธ๋ฅผ ๋‚˜๋ˆ„๋ ค๋‹ค๊ฐ€ ๊ตณ์ด ๋‚˜๋ˆ„์ง€ ์•Š์•˜๋Š”๋ฐ ์˜คํžˆ๋ ค ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์ •๋‹ต์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

โ–ผ ์ž˜๋ชป๋œ ์‚ฌ์šฉ ์˜ˆ์‹œ

๋”๋ณด๊ธฐ
class Lotto {
   #numbers


   constructor(numbers) {
       this.#numbers = numbers
   }


   getNumbers() {
       return this.#numbers
   }
}


class LottoGame {
   play() {
       const lotto = new Lotto(...)


       // ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
       lotto.getNumbers().contains(number)


       // ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ๋ช‡ ๊ฐœ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
       lotto.getNumbers().stream()...
   }
}

 

โ–ผ  ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ ์˜ˆ์‹œ

๋”๋ณด๊ธฐ
class Lotto {
   #numbers


   constructor(numbers) {
       this.#numbers = numbers
   }


   contains(number) {
       // ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
       return ...
   }


   matchCount(other) {
       // ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ๋ช‡ ๊ฐœ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
       return ...
   }
}


class LottoGame {
   play() {
       const lotto = new Lotto(...)


       lotto.contains(number)
       lotto.matchCount(...)
   }
}

์ฐธ๊ณ ๊ธ€ : https://tecoble.techcourse.co.kr/post/2020-04-28-ask-instead-of-getter/ 

 

getter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๊ฐ์ฒด์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์ž

getter๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๊ณ , setter๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. ์ž๋ฐ” ๋นˆ ์„ค๊ณ„ ๊ทœ์•ฝ์— ๋”ฐ๋ฅด๋ฉด ์ž๋ฐ” ๋นˆ ํด๋ž˜์Šค ์„ค๊ณ„ ์‹œ, ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ์ ‘๊ทผ์ œ์–ด์ž๋Š” private

tecoble.techcourse.co.kr

๐Ÿ’ก : ๋‚œ getter๋ฅผ ๋‚จ์šฉํ•˜์˜€๊ตฌ๋‚˜

 

[ ํ•„๋“œ(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜)์˜ ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ๋‹ค ]

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

์ด ํ”ผ๋“œ๋ฐฑ์€.. ๋‚˜์™€ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์•˜๋Š”์ง€ ๊ถ๊ธˆํ•ด์ง€๋Š” ํ”ผ๋“œ๋ฐฑ์ด์—ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด 

3์ฃผ์ฐจ์˜ LottoController์˜ ํ•„๋“œ;;

;;;; ํ˜น์‹œ ๋‚ด๊ฑฐ ๋ณด๊ณ  ์ถฉ๊ฒฉ ๋จน์œผ์…”์„œ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์— ์ž‘์„ฑํ•˜์‹ ๊ฒŒ ์•„๋‹๊นŒ ํ•˜๋Š” ์ •๋„๋กœ ๋งŽ์€ ์ˆ˜์˜ ํ•„๋“œ

์ด์ฏค๋˜๋‹ˆ ๋‚ด ๋งˆ์Œ๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๋Š”.. ์ •๋ง ์ฆ๊ธฐ๊ธฐ๋งŒ ํ•˜๋Š” ํ”„๋ฆฌ์ฝ”์Šค ์œ ์ €๊ฐ€ ์•„๋‹๊นŒ..

๊ทธ๋ž˜๋„ ์ง€๊ธˆ์ด๋ผ๋„ ์•Œ์•˜์œผ๋‹ˆ ํ”ผ๋“œ๋ฐฑ์— ์ž‘์„ฑ๋œ ๋ฐฉ์‹์ฒ˜๋Ÿผ ๋‚˜๋„ ํ•„๋“œ๋ฅผ ํ•œ๋ฒˆ .. ์ค„์—ฌ๋ณด๋Š” ๋ฐฉ์•ˆ์„ ๊ณ ์•ˆํ•ด์•ผ๊ฒ ๋‹ค.

์˜ˆ์‹œ๋กœ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ

class LottoResult {
   #result = new Map()
   #profitRate
   #totalPrize
}

 

 

ํ•„๋“œ๊ฐ€ ๋งŽ์œผ๋ฉด ์ค‘๋ณต์ด ์žˆ๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ ํ•„๋“œ๊ฐ€ ์—†๋Š” ์ง€ ํ™•์ธํ•˜๊ณ  ์ตœ์†Œํ™”ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” profitRate์™€ totalPrize๋Š” ๋‹น์ฒจ ๋‚ด์—ญ(result)๋งŒ ์žˆ์–ด๋„ ๋ชจ๋‘ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด๋ฏ€๋กœ ํ•˜๋‚˜์˜ ํ•„๋“œ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

class LottoResult {
   #result = new Map()


   calculateProfitRate() { ... }


   calculateTotalPrize() { ... }
}

๊ทธ๋ž˜์„œ ๋‚˜๋„ ํ•œ๋ฒˆ ๋‚ด ๊ฒƒ์„ ์ค„์—ฌ๋ณธ๋‹ค๋ฉด..

class LottoController {
  constructor() {
    this.ticket = new Ticket();
    this.jackpot = new Jackpot();
    this.lottos = [];
    this.winnings = [];
    this.bonus = null;
    this.cost = 0;
    this.prize = 0;
    this.ranks = { 5: 0, 4: 0, 3: 0, 2: 0, 1: 0 };
  }

์—ฌ๊ธฐ์„œ lottos๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์–ป์€ ๋žœ๋ค ๋กœ๋˜ ์ˆซ์ž๋ฅผ ๋‹ด๋Š” ๋ฐฐ์—ด์ด๊ณ  winnings๋Š” ๋‹น์ฒจ ์ˆซ์ž์ด๋‹ค. ๋˜ํ•œ cost๋Š” ๋น„์šฉ์— ๊ด€ํ•œ ๊ฒƒ์ธ๋ฐ cost์™€ lottos๊ฐ€ ์—ฐ๊ด€์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ticket ํ•„๋“œ์™€ ์ค‘๋ณต๋˜๋ฉฐ jackpot ๋˜ํ•œ winnings์™€ bonus ๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ๊ฐ’์„ ๋‹ด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ranks ๊ฐ’์„ ํ†ตํ•ด prize๊ฐ’์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋‘๊ฐœ๋„ ์ค‘๋ณต๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ prize์™€ ranks๋Š” ์ตœ์ข… ๊ฒฐ๊ณผ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— result ํ•„๋“œ๋กœ ์ค‘๋ณต๋œ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

class LottoController {
  constructor() {
    this.#ticket = new Ticket();
    this.#jackpot = new Jackpot();
    this.#lottos = []; 
    this.#winnings = []; 
    this.#bonus = null; 
    this.#result = {}; 
  }
}

์•„๋ฌด๋ž˜๋„ ์—ฌ๊ธฐ์„œ ๋” ์ค„์ด๋ ค๋ฉด ํด๋ž˜์Šค์˜ ์บก์Аํ™”๋ฅผ ์ž˜ ํ•ด์„œ ๊ฐ์ฒด๋งŒ ๊ฐ€์ ธ์™”์–ด์•ผํ•˜๋Š”๋ฐ ๊ทธ๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•˜๋‹ˆ ์œ„์™€ ๊ฐ™์ด ์ค„์ด๊ฒŒ ๋˜๊ณ  ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ค„์—ฌ๋„ ํ•„๋“œ์˜ ๊ฐœ์ˆ˜๋Š” ๋งŽ๋‹ค.. 

๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒŒ ๋” ํฌ๊ฒŒ ์™€๋‹ฟ๋Š”๋‹ค.

 

[ ์„ฑ๊ณตํ•˜๋Š” ์ผ€์ด์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜ˆ์™ธ ์ผ€์ด์Šค๋„ ํ…Œ์ŠคํŠธํ•œ๋‹ค ]

 ๋‹คํ–‰ํžˆ๋„ ์˜ˆ์™ธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค (์–ํ˜ธ)

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋งŽ์ด ์ž‘์„ฑํ•œ ๊ฑด ์•„๋‹ˆ์ง€๋งŒ ์„ฑ๊ณต๊ณผ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ ๋ชจ๋‘ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋ฉฐ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ์˜ ERROR ๋ฌธ๊ตฌ๋„ ๊ณ„์† ์ž˜๋ชป ์ž‘์„ฑํ•˜์—ฌ ์ˆ˜์ •์„ ๊ฑฐ์น˜๋Š”.. ์ƒํ™ฉ๋„ ๋งŽ์•˜๋‹ค.

์˜ˆ์™ธ ์ผ€์ด์Šค ํ…Œ์ŠคํŠธ๋„ ๋” ์ž์„ธํžˆ ์ž‘์„ฑํ•˜๊ณ  ์„ฑ๊ณตํ•œ ์ผ€์ด์Šค๋„ ์ž˜ ์ž‘์„ฑํ•˜๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค.

 

[ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ์ฝ”๋“œ๋‹ค ]

 ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•˜๋‹ค. ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ถ€๋ถ„์€ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ณ  ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œ์ผœ์•ผํ•œ๋‹ค. ์ง€๊ธˆ๋ณด๋‹ˆ ๋‚˜์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’๋งŒ ๋ฐ”๋€Œ๊ฒŒ ๋งŒ๋“ค์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์–ป์–ด๊ฐ€๋Š” ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์€ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์ด๋‹ค..

> ์ค‘๋ณต๋˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐํ™”๋œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ๋ฆฌํŒฉํ† ๋ง (์˜ˆ์‹œ)

test.each([["999"], ["0"], ["-123"]])("์ฒœ์› ๋ฏธ๋งŒ์˜ ๊ธˆ์•ก์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ", (input) => {
   expect(() => {
     const app = new App(input);
     app.play();
   }).toThrow();
 }
);

 

[ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ๋Š” ๊ตฌํ˜„ ์ฝ”๋“œ์—์„œ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค ]

 ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š์€ ์Šต๊ด€์ด๋ผ๊ณ  ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ , ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ ์ฝ”๋“œ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ตฌํ˜„ ์ฝ”๋“œ๊ฐ€ ํ…Œ์ŠคํŠธ์— ์ข…์†๋˜๊ณ , ์บก์Аํ™”๊ฐ€ ๊นจ์ง€๋ฉฐ ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ์ด ์ €ํ•ด๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ์•„๋ž˜์˜ ๋‘ ์ผ€์ด์Šค๋ฅผ ์ž˜๊ธฐ์–ตํ•˜๊ณ  ์œ ์˜ํ•ด๋ณด์ž.

  • ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด # prefix๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ

 

[ ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์šด ์ฝ”๋“œ๋ฅผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ]

ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ค์šด ์ฝ”๋“œ๋Š” ์™ธ๋ถ€๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค. ์˜ˆ์‹œ๋ฅผ ๋ณด๋‹ˆ ๋ฐ”๋กœ ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค.

A : 

const MissionUtils = require("@woowacourse/mission-utils");


class Lotto {
   #numbers


   constructor() {
       this.#numbers = Randoms.pickUniqueNumbersInRange(1, 45, 6)
   }
}
---
class LottoMachine {
   execute() {
       const lotto = new Lotto()
   }

์œ„์˜ numbers ํ•„๋“œ ์ž์ฒด๊ฐ€ ๋žœ๋ค ์ˆซ์ž๋ฅผ ๋ฐ›๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์„ ์–ธ๋˜์–ด์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋‚ด๋ถ€์˜ ํ•„๋“œ์— ์„ ์–ธ๋˜์–ด์žˆ๋Š” ์ˆซ์ž๋ฅผ ํ…Œ์ŠคํŠธ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋ ค์šฐ๋ฏ€๋กœ ์™ธ๋ถ€๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์‹œ๋„๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

B :

const MissionUtils = require("@woowacourse/mission-utils");


class Lotto {
   #numbers


   constructor(numbers) {
       this.#numbers = numbers
   }
}


class LottoMachine {
   execute() {
       const numbers = Randoms.pickUniqueNumbersInRange(1, 45, 6)
       const lotto = new Lotto(numbers)
   }
}

Random ๊ฐ’์œผ๋กœ ๋žœ๋ค์„ฑ์„ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•˜๋Š”๋ฐ ๊ทธ๋Ÿฌ๋ ค๋จผ Random ๊ฐ’์˜ ๊ฒฐ๊ณผ๊ฐ€ ๊ณ ์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ A์˜ ์ƒํ™ฉ์—์„œ๋Š” Lotto์— ์ง์ ‘ ์˜์กดํ•˜๋ฏ€๋กœ ๋žœ๋ค ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๊ฒŒ ๋˜์–ด ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ๋งค๋ฒˆ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. Application, LottoMachine, Lotto๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. 

ํ•˜์ง€๋งŒ B์˜ ์ƒํ™ฉ์ด ๋˜๋ฉด LottoMachine์—์„œ Randoms๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์ด ๊ฒฐ๊ณผ๋ฅผ Lotto์— ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— Lotto์—์„œ Randoms ๊ฐ’์„ ๋ฐ›์•„ ๊ณ ์ •๋œ ๊ฒฐ๊ณผ ํ•˜๋‚˜๋งŒ ๊ฐ€์ง€๊ณ  ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„๋ฆฌํ•˜์—ฌ Lotto๊ฐ€ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— B์ฒ˜๋Ÿผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.  

์ฐธ๊ณ ๊ธ€ : https://tecoble.techcourse.co.kr/post/2020-05-07-appropriate_method_for_test_by_parameter/

 

๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ข‹์€ ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค๊ธฐ

tecoble.techcourse.co.kr

 

์ค‘๊ฐ„ KPT ํšŒ๊ณ 

๋กœ๋˜์˜ ๋žœ๋ค ๊ฐ’๊ณผ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ๋งค์นญํ•˜์—ฌ ๋‹น์ฒจ ํ†ต๊ณ„ ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ถ€๋ถ„์ด ๊ฐ€์žฅ ์–ด๋ ค์› ๊ณ , ์ด ๋ถ€๋ถ„์ด ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ด์—ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ๋ง‰๋ง‰ํ–ˆ๋Š”๋ฐ, ์š”๊ตฌ์‚ฌํ•ญ์—์„œ else ์‚ฌ์šฉ์„ ์ง€์–‘ํ•˜๋ผ๋Š” ์ง€์นจ ๋•๋ถ„์— if๋งŒ์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์„ ์ตํžˆ๊ฒŒ ๋˜์—ˆ๋‹ค. else๋ฅผ ์ง€์–‘ํ•˜๋Š” ์ด์œ ๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๋ณต์žก์„ฑ์„ ์ค„์—ฌ์ค€๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. else๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ์ค‘์ฒฉ๋„๊ฐ€ ๋†’์•„์ ธ ์ฝ๊ธฐ ์–ด๋ ต๊ณ , ์ˆ˜์ •์ด๋‚˜ ๋กœ์ง ํ™•์žฅ ์‹œ ์‹ค์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šฐ๋ฏ€๋กœ if์™€ return์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๋Š” ์ ์„ ๋ฐฐ์› ๋‹ค.

๊ตฌํ˜„์— ์ง‘์ค‘ํ•˜๋‹ค ๋ณด๋‹ˆ ์Œ์ˆ˜ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๋น ๋œจ๋ฆฐ ๊ฒƒ์ด ๊ธฐ์–ต์— ๋‚จ๋Š”๋‹ค. 1์ฃผ์ฐจ๋ถ€ํ„ฐ ์‹ ๊ฒฝ ์ผ๋˜ ์˜ˆ์™ธ ์ƒํ™ฉ์„ 3์ฃผ์ฐจ์— ๊ณ ๋ คํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ์ ์ด ์•„์‰ฌ์› ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๋ฒ•์„ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋ฉ”์„œ๋“œ๋ฅผ 15์ค„ ์ด๋‚ด๋กœ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ๊ธฐ์— ๊ธฐ๋Šฅ ๋‹จ์œ„๋ฅผ ์ตœ๋Œ€ํ•œ ๋ถ„๋ฆฌํ•˜๋‹ค ๋ณด๋‹ˆ, ๊ฐ์ฒด๋ณ„๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฐ์ฒด์™€ ์—ฐ๊ด€๋œ ํ•จ์ˆ˜๋‚˜ ์ƒ์ˆ˜, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํŒŒ์ผ๋“ค์„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ณ„๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๊ธฐ๋Šฅ๋ณ„๋กœ ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

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

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

Keep (์œ ์ง€ํ•˜๋ฉด ์ข‹์€ ์ )

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

 

 Problem (๊ณ ์ณ์•ผํ•  ๋ฌธ์ œ์ )

  • ํ”„๋ผ์ด๋น— ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์„ ์ง€ํ‚ค์ง€ ๋ชปํ•œ ๊ฒƒ
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์•„ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์œ„๋ฐฐํ•œ ๊ฒƒ
  • ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ
  • ํด๋ž˜์Šค์—์„œ getter๋ฅผ ๋‚จ์šฉํ•œ ๊ฒƒ
  • ํ•„๋“œ๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‚จ๋ฐœํ•˜์—ฌ ์บก์Аํ™”ํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ

 

Try (Problem์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณด์™„ํ•˜์—ฌ ์ƒˆ๋กœ ์‹œ๋„ํ•ด๋ณผ ์ )

  • ํ”„๋ผ์ด๋น— ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์„ ์ง€์ผœ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•  ๊ฒƒ
  • View ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI๋กœ์ง์„ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌํ•  ๊ฒƒ
    • View ํด๋”์— InputView.js์™€ OutputView.js๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.
  • ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์‚ฌ์ „์— ์ถฉ๋ถ„ํžˆ ์ •์˜ํ•˜๊ณ  ์„ค๊ณ„ํ•˜๊ธฐ
    • ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ คํ•œ ํ›„์— ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•˜๊ณ  ๊ทธ ์ดํ›„์— ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•  ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์Šต๊ด€์„ ๋“ค์ธ๋‹ค.
    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋ฐ˜๋ณต๋˜๋Š” ํ…Œ์ŠคํŠธ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐํ™”๋œ ํ…Œ์ŠคํŠธ๋กœ ๋ฆฌํŒฉํ† ๋ง ํ•  ๊ฒƒ 
  • get ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ๊ฐ’์„ ์™ธ๋ถ€์—์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ์ฒด ๋ฉ”์‹œ์ง€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๋ฉ”์„œ๋“œ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•  ๊ฒƒ
  • ํ•„๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์บก์Аํ™”๋ฅผ ๊ฐ•ํ™”ํ•˜๊ธฐ์œ„ํ•ด ํ•„๋“œ์˜ ์—ญํ• ๊ณผ ๊ด€๋ จ์„ฑ์— ๋”ฐ๋ผ ํด๋ž˜์Šค ๊ตฌ์กฐ ์ตœ์ ํ™”ํ•˜๊ธฐ

 

๊ฒฐ๋ก 

KPT ํšŒ๊ณ ์˜ ์‚ฌํ•ญ๊ณผ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์„ ์ž˜ ๋ฐ˜์˜ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋˜, ์›์น™์€ ์ง€์ผœ ์„ค๊ณ„๋œ ์ฝ”๋“œ๋กœ ๋ฆฌํŒฉํ† ๋ง ํ•˜๋Š”๋ฐ์— ์ง‘์ค‘ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.