Skip to content

[๐Ÿš€ ์‚ฌ์ดํด2 - ๋ฏธ์…˜ (๋ธ”๋ž™์žญ ๋ฒ ํŒ…)] ์„œ์—ฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.#1132

Open
yeo-li wants to merge 17 commits intowoowacourse:yeo-lifrom
yeo-li:step2
Open

Conversation

@yeo-li
Copy link

@yeo-li yeo-li commented Mar 16, 2026

์ฒดํฌ ๋ฆฌ์ŠคํŠธ

  • ๋ฏธ์…˜์˜ ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ–ˆ๋‚˜์š”?
  • Gradle test๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ, ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผํ–ˆ๋‚˜์š”?
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋‚˜์š”?

๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ์— ์—†์–ด ์Šค์Šค๋กœ ์ •ํ•œ ๋‚ด์šฉ

1. ๋ฒ ํŒ… ๊ธˆ์•ก๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ

  • ๋ฒ ํŒ… ๊ธˆ์•ก์˜ ์ตœ์†Œ ๋‹จ์œ„๋Š” 10์›์ด๋‹ค.
  • ๋ฒ ํŒ… ๊ธˆ์•ก์€ 10์› ์ด์ƒ 100000000์› ์ดํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

์–ด๋–ค ๋ถ€๋ถ„์— ์ง‘์ค‘ํ•˜์—ฌ ๋ฆฌ๋ทฐํ•ด์•ผ ํ• ๊นŒ์š”?

1. ์ปค๋ฐ‹ ๋‹จ์œ„๋Š” ์–ด๋–ป๊ฒŒ ํ•˜์‹œ๋‚˜์š”?

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

2. ํ…Œ์ŠคํŠธ ๋จผ์ € ์ž‘์„ฑํ•ด์•ผํ• ๊นŒ์š”? ์•„๋‹ˆ๋ฉด ๊ฐœ๋ฐœ ๋จผ์ € ํ•ด์•ผํ• ๊นŒ์š”?

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

3. ์ข‹์€ ์„ค๊ณ„์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•ด์š”!

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

๋ฆฌ๋ทฐ์–ด์—๊ฒŒ

์•ˆ๋…•ํ•˜์„ธ์š” ์ฃผ๋””!
์‚ฌ์ดํด1์—์„œ ์†Œ์ค‘ํ•œ ํ”ผ๋“œ๋ฐฑ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ด์š”โ˜บ๏ธ
์‚ฌ์ดํด2์—์„œ๋Š” ์‚ฌ์ดํด1์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ชจ๋‘ ์ ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ์™„์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค!
์‚ฌ์ดํด2์—์„œ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ข‹์€ ์„ค๊ณ„, ๊ฐœ๋ฐœ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์‹๊ณผ ํƒœ๋„์ž…๋‹ˆ๋‹ค.
์‚ฌ์‹ค ์•„์ง ์œ„์— ๋Œ€ํ•ด ๊ฐˆํ”ผ๋ฅผ ๋ชป์žก๊ณ  ์žˆ์–ด์š”๐Ÿฅบ ์ ˆ๋Œ€์ ์ธ ์ •๋‹ต์ด ์—†๋‹ค๋ฉด ์ •๋‹ต์ด ์—†๋Š” ๊ณณ์—์„œ ์ •๋‹ต์„ ๋„์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ์š”?
๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ์—๋Š” ์„ธ์„ธํ•œ ๋ถ€๋ถ„๋ณด๋‹จ, ๊ฐœ๋ฐœ์˜ ๊ฑฐ์‹œ์ ์ธ ๊ด€์ ์—์„œ ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„์ด ์žˆ์—ˆ์–ด์š”!
๋ฌผ๋ก  ์ฝ”๋“œ์—์„œ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„๋“ค์— ๋Œ€ํ•ด์„œ๋„ ์–ธ์ œ๋“ ์ง€ ํ”ผ๋“œ๋ฐฑ ํ•ด์ฃผ์‹œ๋ฉฐ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!
์ด๋ฒˆ ์ฃผ๋„ ์ข‹์€ ์ผ๋งŒ ์žˆ๊ธธ ๋ฐ”๋ผ๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿ€

yeo-li added 17 commits March 13, 2026 18:50
@jurlring
Copy link

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

์Œ ์ปค๋ฐ‹์€ ๋‚˜์ค‘์— ์ปค๋ฐ‹๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์–ด๋–ค ๋ณ€๊ฒฝ์ด ์žˆ์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•จ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜์–ด์„œ์š”. ์ €๋„ ์ž‘์—… ๋‹จ์œ„๋กœ ์ปค๋ฐ‹ํ•˜๋Š”๊ฒŒ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์œ„์™€ ๊ฐ™์€ ์‚ฌ์œ ๋กœ ์ปค๋ฐ‹ ๋‹จ์œ„๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง€๋ฉด ํ™•์ธ์ด ์–ด๋ ต๊ฒ ์ง€์š”..! ๊ทธ๋ž˜์„œ ์ž‘์—… ๋‹จ์œ„๋กœ ์ปค๋ฐ‹ํ•˜์‹ค๊ฑฐ๋ผ๋ฉด ์ž‘๊ฒŒ ์ž‘์—…์„ ์žก๋Š”๊ฒŒ ์ค‘์š”ํ•  ๊ฒƒ ๊ฐ™์•„์š” :)

@jurlring
Copy link

  1. ํ…Œ์ŠคํŠธ ๋จผ์ € ์ž‘์„ฑํ•ด์•ผํ• ๊นŒ์š”? ์•„๋‹ˆ๋ฉด ๊ฐœ๋ฐœ ๋จผ์ € ํ•ด์•ผํ• ๊นŒ์š”?
    ์ด๋ฒˆ ๋ฏธ์…˜1์—์„œ๋Š” TDD๋ฅผ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. TDD๋ฅผ ํ•˜๋ฉด์„œ ์ข‹์•˜๋˜ ๋ถ€๋ถ„์€ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ๊ฐœ๋ฐœ ์†๋„๋Š” ๋งŽ์ด ๋”๋ŽŒ์กŒ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ถ”๊ฐ€๋กœ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๋„๋ฉ”์ธ์ด๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋“ค์— ๋Œ€ํ•ด ๋จผ์ € ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ตฌํ˜„ํ•˜๋กœ ํ–ˆ๋˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ์žฌ๊ท€์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ด ๋“ค์–ด๊ฐ”๊ธฐ ๋•Œ๋ฌธ์—, ์ค‘๊ฐ„์— ์ž‘์—… ํ๋ฆ„์„ ๋†“์น˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” TDD๊ฐ€ ํ˜„์—…์—์„œ๋„ ์œ ํšจํ•œ ๊ฐœ๋ฐœ ๋ฐฉ์‹์ธ์ง€ ๊ถ๊ธˆํ•˜๊ณ , ์œ ํšจํ•˜๋‹ค๋ฉด TDD์˜ ํ˜„์‹ค์ ์ธ ๋ฐฉ๋ฒ•๊ณผ ์–ด๋–ค์ ์ด ์œ ํšจํ•œ์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!

TDD๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ด๊ณ  ๋„๋ฆฌ ์•Œ๋ ค์ง„ ๊ฒƒ๊ณผ ๊ฐ™์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ์•„๋‹ˆ์—์š”. ๋ฌด์กฐ๊ฑด ์‚ฌ์šฉํ•œ๋‹ค๊ณ ๋Š” ๋ง์”€๋“œ๋ฆฌ๊ธด ์–ด๋ ต๊ธดํ•ด์š”.
๊ฐœ๋ฐœ์†๋„๊ฐ€ ๋”๋ŽŒ์ง„ ๊ฒƒ์€ TDD์— ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ๋ผ๊ณ  ์ƒ๊ฐ๋˜๊ณ ์š”! ์ฒ˜์Œ ํ•˜๋‹ค๋ณด๋ฉด ๋‹น์—ฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๊ณ , ์—ฐ์Šตํ•˜์…”์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์š” :)
์ž‘์—… ํ๋ฆ„์„ ๋†“์น˜์‹  ๋ถ€๋ถ„์€ ์ œ๊ฐ€ ์ž˜ ์ดํ•ดํ•œ๊ฑด์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ํฐ ํ๋ฆ„์„(์„œ๋น„์Šค ๋А๋‚Œ) TDD๋กœ ๊ฐœ๋ฐœํ•˜์‹œ๋‹ค๊ฐ€ ํ•„์š”ํ•œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋‹ˆ ํ๋ฆ„์„ ๋†“์น˜์‹ ๊ฑธ๊นŒ์š”?!
์š”๊ฑด ์˜คํžˆ๋ ค ํ•ด์•ผํ•  ์ž‘์—…์ด ๋ฐ”๋กœ ๋ณด์—ฌ์„œ ์žฅ์ ์ด ์•„๋‹Œ๊ฐ€ ์‹ถ์€๋ฐ,, ์ œ๊ฐ€ ์ž˜๋ชป์ดํ•ดํ•œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์–ด์š”..! ๐Ÿ”ฎ

@jurlring
Copy link

  1. ์ข‹์€ ์„ค๊ณ„์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•ด์š”!
    ์ฝ˜์†” ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๊ฐ์ฒด๊ฐ„ ํ˜‘๋ ฅ์ด ์ค‘์š”ํ•˜๊ฒŒ ์ž‘์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ์ €๋Š” ์ฒ˜์Œ์—” ๋ฌด์กฐ๊ฑด MVC ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์„ ํ–ˆ์—ˆ๋Š”๋ฐ, ๋ฌด์กฐ๊ฑด ์ •๋‹ต์ธ ๋””์ž์ธ ํŒจํ„ด์€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ์–ด์š”๐Ÿซข ์ฝ˜์†” ํ”„๋กœ๊ทธ๋žจ, ์›น ์„œ๋ฒ„ ์ฒ˜๋Ÿผ ๊ตฌํ˜„ ์žฅ์†Œ๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์—์„œ๋„ ์ข‹์€ ์„ค๊ณ„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ค ํƒœ๋„๋‚˜ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ์š”? ๊ทธ๋ฆฌ๊ณ  ์„ค๊ณ„์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ ์‹ถ์€๋ฐ, ๊ณต๋ถ€ํ•˜๊ธฐ ์ข‹์€ ์ฑ…๋„ ์ถ”์ฒœํ•ด์ฃผ์‹œ๋ฉด ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.โ˜บ๏ธ

ํƒœ๋„๋Š” ๋ชจ๋‘๊ฐ€ ๋งž๋‹ค๊ณ  ํ•ด๋„ ์˜์‹ฌํ•ด๋ณด๊ธฐ & ์—ด๋ฆฐ ๋งˆ์Œ์ด ์ค‘์š”ํ•  ๊ฒƒ ๊ฐ™๊ณ ์š”~
์‚ฌ์‹ค ๋””์ž์ธ ํŒจํ„ด์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŽ์€ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•˜๋‹ค๋ณด๋‹ˆ ์ด๋Ÿฐ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•  ๋•Œ์—๋Š” ์ด๋ ‡๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜๋„ ์žˆ๋‹ค~ ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ๋‚˜์˜จ๊ฑฐ๋ผ์„œ ๋ชจ๋“  ์š”๊ตฌ์‚ฌํ•ญ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ์ •๋‹ต๋„ ์•„๋‹ˆ์—์š”.
์ฑ…์€ ์ง€๊ธˆ ๋ ˆ๋ฒจ์—์„œ ์ฝ์„๋งŒํ•œ๊ฑด https://product.kyobobook.co.kr/detail/S000001062523 ์š”๊ฑฐ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

@jurlring
Copy link

๋ฆฌ๋ทฐ์–ด์—๊ฒŒ
์•ˆ๋…•ํ•˜์„ธ์š” ์ฃผ๋””!
์‚ฌ์ดํด1์—์„œ ์†Œ์ค‘ํ•œ ํ”ผ๋“œ๋ฐฑ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ด์š”โ˜บ๏ธ
์‚ฌ์ดํด2์—์„œ๋Š” ์‚ฌ์ดํด1์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ชจ๋‘ ์ ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ์™„์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค!
์‚ฌ์ดํด2์—์„œ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ข‹์€ ์„ค๊ณ„, ๊ฐœ๋ฐœ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์‹๊ณผ ํƒœ๋„์ž…๋‹ˆ๋‹ค.
์‚ฌ์‹ค ์•„์ง ์œ„์— ๋Œ€ํ•ด ๊ฐˆํ”ผ๋ฅผ ๋ชป์žก๊ณ  ์žˆ์–ด์š”๐Ÿฅบ ์ ˆ๋Œ€์ ์ธ ์ •๋‹ต์ด ์—†๋‹ค๋ฉด ์ •๋‹ต์ด ์—†๋Š” ๊ณณ์—์„œ ์ •๋‹ต์„ ๋„์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ์š”?
๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ์—๋Š” ์„ธ์„ธํ•œ ๋ถ€๋ถ„๋ณด๋‹จ, ๊ฐœ๋ฐœ์˜ ๊ฑฐ์‹œ์ ์ธ ๊ด€์ ์—์„œ ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„์ด ์žˆ์—ˆ์–ด์š”!
๋ฌผ๋ก  ์ฝ”๋“œ์—์„œ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„๋“ค์— ๋Œ€ํ•ด์„œ๋„ ์–ธ์ œ๋“ ์ง€ ํ”ผ๋“œ๋ฐฑ ํ•ด์ฃผ์‹œ๋ฉฐ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!
์ด๋ฒˆ ์ฃผ๋„ ์ข‹์€ ์ผ๋งŒ ์žˆ๊ธธ ๋ฐ”๋ผ๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿ€

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

๋‹ค๋งŒ ์ง€๊ธˆ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ๋ฐฐ์›Œ๊ฐ€๋Š” ๊ณผ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์ •๋‹ต์„ ์ฐพ์œผ๋ ค๊ณ  ํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ๋‹ค์–‘ํ•œ ์„ ํƒ์ง€๋ฅผ ์ง์ ‘ ๊ฒฝํ—˜ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๋ง์”€ํ•ด์ฃผ์‹  ๊ฒƒ์ฒ˜๋Ÿผ ์ •๋‹ต์ด ์—†๋Š” ๋ฌธ์ œ๋ผ๋„ ํ•ญ์ƒ ์—ฌ๋Ÿฌ ์„ ํƒ์ง€๋Š” ์กด์žฌํ•˜์ž–์•„์š”~ ๊ทธ ์„ ํƒ์ง€๋“ค์„ ์ง์ ‘ ์ ์šฉํ•ด๋ณด๊ณ , ์–ด๋–ค ๋ฐฉ์‹์ด ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์€์ง€ ๊ฒฝํ—˜์„ ํ†ตํ•ด ๊นจ๋‹ซ๋Š” ๊ณผ์ •์ด ํฐ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์˜ ๊ฑฐ์‹œ์ ์ธ ๊ด€์ ์—์„œ ๊ถ๊ธˆํ•˜๋‹ค๊ณ  ๋ง์”€ํ•ด์ฃผ์…จ๋Š”๋ฐ, ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ๋ถ€๋ถ„์ด ๊ถ๊ธˆํ•˜์‹ ์ง€ ์กฐ๊ธˆ ๋” ์•Œ ์ˆ˜ ์žˆ์„๊นŒ์š”? ํ˜น์€ PR์— ์ž‘์„ฑํ•ด์ฃผ์‹  ๋ถ€๋ถ„์ผ๊นŒ์š”?

Copy link

@jurlring jurlring left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์„œ์—ฌ ์•ˆ๋…•ํ•˜์„ธ์š”~
๊ฒŒ์ž„์ด ์š”๊ตฌ์‚ฌํ•ญ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด๋ž‘ ์ฝ”๋ฉ˜ํŠธ ๋ช‡๊ฐ€์ง€ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค!
์‹œ๊ฐ„ ๊ดœ์ฐฎ์œผ์‹ค ๋•Œ ํ™•์ธํ•ด์ฃผ์„ธ์š”~! ๐Ÿฐ

Comment on lines +18 to +20
public static int MONEY_MIN_VALUE = 10;
public static int MONEY_MAX_VALUE = 100_000_000;
public static int MONEY_UNIT = 10;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

final์ด ๋น ์ง„ ๊ฒƒ ๊ฐ™์•„์š”.
์ œ ๊ฐœ์ธ์ ์ธ ํŒ์ธ๋ฐ, PR ์ œ์ถœํ•˜๊ณ  changes๋กœ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋‚ด๊ฐ€ ๋ฆฌ๋ทฐํ•˜๋Š” ์‹œ์„ ์—์„œ ๋‚ด ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”! :)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ํ—‰ ๊ทธ๋Ÿฌ๋„ค์š”.. ๋‹ค์Œ์—” changes๋„ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ํ”ผ๋“œ๋ฐฑ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜Š

return action;
}

public boolean isHit() {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋ฏธ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์—ฌ์š” ๐Ÿ˜ฟ

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋ฏธ์ณ ํ™•์ธ ๋ชปํ–ˆ๋„ค์š”..! ๋ฐ”๋กœ ์ง€์šฐ๊ฒ ์Šต๋‹ˆ๋‹ค!

Comment on lines 35 to 45
private static void validate(String input) {
validateYesNoActionInput(input);
}

private static void validateYesNoActionInput(String input) {
String normalized = input.strip();
if (!normalized.equals(PlayerAction.HIT.getAction()) && !normalized
.equals(PlayerAction.STAND.getAction())) {
throw new IllegalArgumentException(ErrorMessage.INVALID_YES_NO_INPUT.getMessage());
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

validate์—์„œ validateYesNoActionInput๋งŒ ํ˜ธ์ถœํ•˜๋Š”๊ฒŒ ๋ถˆํ•„์š”ํ•œ ๋ถ„๋ฆฌ ๊ฐ™์•„๋ณด์—ฌ์š”..! ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ์š”?

๋˜ํ•œ validateYesNoActionInput ๋ฉ”์„œ๋“œ๋Š” ๋ณ€๊ฒฝ์— ์ทจ์•ฝํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด HIT, STAND์™ธ์— ๋‹ค๋ฅธ enum์ด ๋Š˜์–ด๋‚œ๋‹ค๋ฉด ์ฝ”๋“œ์— ๋ณ€๊ฒฝ์ด ์ƒ๊ฒจ์•ผํ•  ๊ฒƒ ๊ฐ™์•„์š”~

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

validate๋กœ ๊ฐ์‹ผ ์ด์œ ๋Š”, ๋˜ ๋‹ค๋ฅธ ์˜ˆ์™ธ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์–ด ํ™•์žฅ์„ฑ์„ ์—ผ๋‘ํ•ด๋‘๊ณ  ๋ถ„๋ฆฌํ•ด๋ณด์•˜์–ด์š”! ํ˜น์‹œ ์ด๋Ÿฐ ๊ด€์ ์—์„œ๋„ validate๋กœ ๊ฐ์‹ธ๋Š”๊ฑด ๋ถˆํ•„์š”ํ•œ ๋ถ„๋ฆฌ์ธ์ง€๋„ ๊ถ๊ธˆํ•ด์š”:)

HIT, STAND ์™ธ์— ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•˜๊ธฐ ์œ„ํ•ด์„œ values()๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋“  ๊ฐ’์„ ์ˆœํšŒํ•˜๋ฉด์„œ, getAction()์„ ์ด์šฉํ•ด ์ž…๋ ฅ๊ฐ’๊ณผ ๊ฐ™์„๋•Œ ํ•ด๋‹น enum์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ฐ’๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๋•Œ, ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋„๋ก ๋ฆฌํŒฉํ† ๋ง ํ–ˆ์Šต๋‹ˆ๋‹ค!

ํ˜น์‹œ ์ด๋ณด๋‹ค ๋” ์ข‹์€ ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ํŽธํ•˜๊ฒŒ ์ œ์‹œํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿ€

return result;
}

public static Result from(Dealer dealer, Player player) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)์˜ ๊ธธ์ด๊ฐ€ 10๋ผ์ธ์„ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.

์ข€ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ฐ”๊ฟ€ ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ์š”~?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ €๋Š” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด, ์šฐ์„  from ๋ฉ”์„œ๋“œ๋ฅผ ๋น„์Šทํ•œ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. from์˜ ์ŠนํŒจ ํŒ์ • ๋กœ์ง์ด ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋จผ์ € Bust๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒ์ •ํ•ฉ๋‹ˆ๋‹ค. ํŒ์ •์ด ๋‚˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, Blackjack ์—ฌ๋ถ€๋กœ ๊ฒฐ๊ณผ๋ฅผ ํŒ์ •ํ•˜๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ทธ๋ž˜๋„ ํŒ์ •์ด๋‚˜์ง€ ์•Š์œผ๋ฉด ์ ์ˆ˜๋ฅผ ๋น„๊ตํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

// ๋ฆฌํŒฉํ† ๋งํ•œ from() ๋ฉ”์„œ๋“œ
public static Result from(Dealer dealer, Player player) {

        // Bust๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ๊ณผ ํŒ์ •
        if (player.isBust()) {
            return Result.LOSE;
        }
        if (dealer.isBust()) {
            return Result.WIN;
        }

        // Blackjack์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ๊ณผ ํŒ์ •
        Result blackjackResult = determineByBlackjack(dealer, player);
        if (blackjackResult != null) {
            return blackjackResult;
        }

        // ์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ๊ณผ ํŒ์ •
        return determineByScore(dealer, player);
    }

    private static Result determineByBlackjack(Dealer dealer, Player player) {
        if (dealer.isBlackjack() && !player.isBlackjack()) {
            return Result.LOSE;
        }
        if (dealer.isBlackjack() && player.isBlackjack()) {
            return Result.PUSH;
        }
        if (player.isBlackjack()) {
            return Result.BLACKJACK;
        }
        return null; // blackjack ์—ฌ๋ถ€๋กœ ๊ฒฐ์ •์„ ํ•  ์ˆ˜ ์—†์„ ๋•Œ, null์„ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
    }

    private static Result determineByScore(Dealer dealer, Player player) {
        if (dealer.calculateScore() == player.calculateScore()) {
            return Result.PUSH;
        }
        if (dealer.calculateScore() > player.calculateScore()) {
            return Result.LOSE;
        }
        return Result.WIN;
    }

์œ„๋Š” ๋ฆฌํŒฉํ† ๋งํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. determineByBlackjack()์—์„œ blackjack์œผ๋กœ ํŒ๋‹จ์ด ์–ด๋ ค์šด ๊ฒฝ์šฐ, null์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ–ˆ์–ด์š”. ๊ทธ๋Ÿฐ๋ฐ ์ €๋ฒˆ์— ์ฒจ๋ถ€ํ•ด์ฃผ์‹  null ๊ด€๋ จ ์ž๋ฃŒ์—์„œ null์ด ์•„๋‹Œ ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ์–ด์ƒ‰ํ•œ ๊ฒฝ์šฐ์— null์„ ์‚ฌ์šฉํ•œ๋‹ค.๋ผ๊ณ  ์–ธ๊ธ‰์ด ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ determineByBlackjack()๊ฐ€ null์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฒŒ ์–ด์ƒ‰ํ•œ ์ƒํ™ฉ์ด๋ผ ์ƒ๊ฐํ•ด, ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค!

์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ Chain Of Responsibility ํŒจํ„ด์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ ์šฉํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ null์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋ณต์žกํ•˜๊ณ  ์ง๊ด€์ ์œผ๋กœ ์•Œ์•„๋ณด๊ธฐ ์–ด๋ ค์›Œ null์„ ๋ฐ˜ํ™˜ํ•˜๋˜, null์˜ ์˜๋ฏธ๋ฅผ ์ฃผ์„์œผ๋กœ ์ ์–ด๋†“๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค!

๋ฉ”์„œ๋“œ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ ๋ณด๋‹ค ๋‚˜๋ˆ„์ง€ ์•Š๋Š”๊ฒŒ ๊ฐ€๋…์„ฑ์— ๋” ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ๊ทธ๋ƒฅ ๋‘์—ˆ๋Š”๋ฐ, ํ”ผ๋“œ๋ฐฑ ์ฃผ์‹  ๋ฐฉํ–ฅ์œผ๋กœ ๊ณ ๋ฏผํ•ด๋ณด๋‹ˆ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹คโ˜บ๏ธ ๊ทธ๋ฆฌ๊ณ  ํ˜น์‹œ ์ด์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•๊ณผ Chain Of Responsibility์˜ ์ ์ ˆํ•œ ์‚ฌ์šฉ ์ผ€์ด์Šค๋„ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:)

Comment on lines 32 to +42
public boolean isBust() {
return hand.calculateScore() > PolicyConstant.BLACKJACK_SCORE;
}

public int calculateScore() {
return hand.calculateScore();
}

public boolean isBlackjack() {
return hand.calculateScore() == PolicyConstant.BLACKJACK_SCORE && hand.getCardNames().size() == 2;
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hand๊ฐ€ Blackjack์ธ์ง€ Bust์ธ์ง€ ํŒ๋‹จํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”? ์ด๋ ‡๊ฒŒ ๋ฐ”๊พธ๋ฉด ์–ด๋–ค ์žฅ์ ์ด ์žˆ์„๊นŒ์š”?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋ฒ„์ŠคํŠธ์™€ ๋ธ”๋ž™์žญ์˜ ํŒ๋‹จ์„ Hand๋กœ ์˜ฎ๊ธฐ๋Š”๊ฒŒ ์ข‹์€ ๊ฒƒ ๊ฐ™์•„์š”! ์šฐ์„  ๊ฐ ๋„๋ฉ”์ธ์—์„œ์˜ ์—ญํ• ์ด ๋” ์ž์—ฐ์Šค๋Ÿฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์—ˆ์–ด์š”. ๊ทธ๋ฆฌ๊ณ  ์ˆ˜์ • ์ „ ์ฝ”๋“œ๋Š” getCardNames()๋ฅผ ํ˜ธ์ถœํ•ด ์ „์ฒด ์นด๋“œ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  this.cards๋ฅผ ์ด์šฉํ•ด ์นด๋“œ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋ž˜์„œ ๋ถˆํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์—ˆ์–ด์š”.

๋ฐ˜๋ฉด hand ๋„๋ฉ”์ธ์œผ๋กœ ์˜ฎ๊ธฐ์ง€ ์•Š์œผ๋ฉด ์ˆ˜์ •์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค(?)๋Š” ์žฅ์ ์€ ์žˆ์—ˆ์ง€๋งŒ, getCardNames() ๋ฉ”์„œ๋“œ๋ฅผ ์นด๋“œ ์ˆ˜๋ฅผ ์„ธ๊ธฐ ์œ„ํ•ด ์›๋ž˜ ๋ฉ”์„œ๋“œ ๋ชฉ์ ๊ณผ ๋งž์ง€ ์•Š์€ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ”ผ๋“œ๋ฐฑ ์ฃผ์‹  ๊ฒƒ ์ฒ˜๋Ÿผ Hand์—์„œ blackjack, bust๋ฅผ ํŒ๋‹จํ•˜๋Š”๊ฒŒ ๋” ์ข‹์€ ์„ค๊ณ„์ธ ๊ฒƒ ๊ฐ™์•„์š”! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค:) ์ฃผ๋””์˜ ์ƒ๊ฐ๋„ ์ด์•ผ๊ธฐ ํ•ด์ฃผ๋ฉด ๊ณ ๋งˆ์šธ ๊ฒƒ ๊ฐ™์•„์š”๐Ÿ€

Comment on lines +45 to +51
private void collectBets() {
for (int playerIndex = 0; playerIndex < blackjackService.getPlayerCount(); playerIndex++) {
String input = inputView.inputBetAmount(blackjackService.getPlayerName(playerIndex));
blackjackService.receivePlayerBets(playerIndex, Money.from(input));
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

index๋กœ ๊ฐ€์ ธ์˜ค๋Š”๊ฒƒ๋ณด๋‹ค, player์˜ ์ดˆ๊ธฐํ™”๋ฅผ ๋ฒ ํŒ…๊ธˆ์•ก๊นŒ์ง€ ๋ฐ›๊ณ  ํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”?
ํ”Œ๋ ˆ์ด์–ด๋Š” ๋ฒ ํŒ…๊ธˆ์•ก์„ ๋ฌด์กฐ๊ฑด ๊ฐ€์ ธ์•ผํ•˜๋Š”๋ฐ Player.placeBet์ด ๋ˆ„๋ฝ๋˜๋ฉด ๋ฒ ํŒ…๊ธˆ์•ก์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋Š” ๊ตฌ์กฐ๋กœ ๋ณด์—ฌ์š”!

String.format("๊ฒŒ์ž„ ์ฐธ๊ฐ€์ž์˜ ์ด๋ฆ„์€ %d~%d๊ธ€์ž ์‚ฌ์ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.", PolicyConstant.PLAYER_NAME_MIN_LENGTH,
PolicyConstant.PLAYER_NAME_MAX_LENGTH)),
PLAYER_NAME_BLANK("๊ฒŒ์ž„ ์ฐธ๊ฐ€์ž์˜ ์ด๋ฆ„์€ ๊ณต๋ฐฑ์ด ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."),
MONEY_NOT_NUMBER("๋ฒ ํŒ… ๊ธˆ์•ก์€ ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."),

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image ์Œ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ”์„๋•Œ ์œ„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ค๋Š”๊ฒŒ ๋งž์„๊นŒ์š”..?!

private boolean isStandSelected(int playerIndex) {
String name = blackjackService.getPlayerName(playerIndex);
String input = inputView.inputHitOrStand(name);
if (PlayerAction.from(input).isStand()) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

21์ ์„ ๋„˜์–ด๋„ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณ„์† ์นด๋“œ๋ฅผ ๋ฐ›์•„๋„ ๋˜๋‚˜์š”?

public record PlayerResultDto(
String name,
Result result
double profit

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๊ธˆ์•ก์ด๋ผ๋Š” ๊ฐ’์ด double๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์„๊นŒ์š”..?!

@yeo-li
Copy link
Author

yeo-li commented Mar 17, 2026

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

์Œ ์ปค๋ฐ‹์€ ๋‚˜์ค‘์— ์ปค๋ฐ‹๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์–ด๋–ค ๋ณ€๊ฒฝ์ด ์žˆ์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•จ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜์–ด์„œ์š”. ์ €๋„ ์ž‘์—… ๋‹จ์œ„๋กœ ์ปค๋ฐ‹ํ•˜๋Š”๊ฒŒ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์œ„์™€ ๊ฐ™์€ ์‚ฌ์œ ๋กœ ์ปค๋ฐ‹ ๋‹จ์œ„๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง€๋ฉด ํ™•์ธ์ด ์–ด๋ ต๊ฒ ์ง€์š”..! ๊ทธ๋ž˜์„œ ์ž‘์—… ๋‹จ์œ„๋กœ ์ปค๋ฐ‹ํ•˜์‹ค๊ฑฐ๋ผ๋ฉด ์ž‘๊ฒŒ ์ž‘์—…์„ ์žก๋Š”๊ฒŒ ์ค‘์š”ํ•  ๊ฒƒ ๊ฐ™์•„์š” :)

์ปค๋ฐ‹๋‹จ์œ„์— ๋Œ€ํ•ด ์˜๊ฒฌ ์ด์•ผ๊ธฐ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ด์š”! ์ž‘์—…์„ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๋Š” ์—ฐ์Šต์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿ’ช๐Ÿป

@yeo-li
Copy link
Author

yeo-li commented Mar 17, 2026

  1. ํ…Œ์ŠคํŠธ ๋จผ์ € ์ž‘์„ฑํ•ด์•ผํ• ๊นŒ์š”? ์•„๋‹ˆ๋ฉด ๊ฐœ๋ฐœ ๋จผ์ € ํ•ด์•ผํ• ๊นŒ์š”?
    ์ด๋ฒˆ ๋ฏธ์…˜1์—์„œ๋Š” TDD๋ฅผ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. TDD๋ฅผ ํ•˜๋ฉด์„œ ์ข‹์•˜๋˜ ๋ถ€๋ถ„์€ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ๊ฐœ๋ฐœ ์†๋„๋Š” ๋งŽ์ด ๋”๋ŽŒ์กŒ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ถ”๊ฐ€๋กœ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๋„๋ฉ”์ธ์ด๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋“ค์— ๋Œ€ํ•ด ๋จผ์ € ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ตฌํ˜„ํ•˜๋กœ ํ–ˆ๋˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ์žฌ๊ท€์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ด ๋“ค์–ด๊ฐ”๊ธฐ ๋•Œ๋ฌธ์—, ์ค‘๊ฐ„์— ์ž‘์—… ํ๋ฆ„์„ ๋†“์น˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” TDD๊ฐ€ ํ˜„์—…์—์„œ๋„ ์œ ํšจํ•œ ๊ฐœ๋ฐœ ๋ฐฉ์‹์ธ์ง€ ๊ถ๊ธˆํ•˜๊ณ , ์œ ํšจํ•˜๋‹ค๋ฉด TDD์˜ ํ˜„์‹ค์ ์ธ ๋ฐฉ๋ฒ•๊ณผ ์–ด๋–ค์ ์ด ์œ ํšจํ•œ์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!

TDD๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ด๊ณ  ๋„๋ฆฌ ์•Œ๋ ค์ง„ ๊ฒƒ๊ณผ ๊ฐ™์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ์•„๋‹ˆ์—์š”. ๋ฌด์กฐ๊ฑด ์‚ฌ์šฉํ•œ๋‹ค๊ณ ๋Š” ๋ง์”€๋“œ๋ฆฌ๊ธด ์–ด๋ ต๊ธดํ•ด์š”. ๊ฐœ๋ฐœ์†๋„๊ฐ€ ๋”๋ŽŒ์ง„ ๊ฒƒ์€ TDD์— ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ๋ผ๊ณ  ์ƒ๊ฐ๋˜๊ณ ์š”! ์ฒ˜์Œ ํ•˜๋‹ค๋ณด๋ฉด ๋‹น์—ฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๊ณ , ์—ฐ์Šตํ•˜์…”์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์š” :) ์ž‘์—… ํ๋ฆ„์„ ๋†“์น˜์‹  ๋ถ€๋ถ„์€ ์ œ๊ฐ€ ์ž˜ ์ดํ•ดํ•œ๊ฑด์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ํฐ ํ๋ฆ„์„(์„œ๋น„์Šค ๋А๋‚Œ) TDD๋กœ ๊ฐœ๋ฐœํ•˜์‹œ๋‹ค๊ฐ€ ํ•„์š”ํ•œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋‹ˆ ํ๋ฆ„์„ ๋†“์น˜์‹ ๊ฑธ๊นŒ์š”?! ์š”๊ฑด ์˜คํžˆ๋ ค ํ•ด์•ผํ•  ์ž‘์—…์ด ๋ฐ”๋กœ ๋ณด์—ฌ์„œ ์žฅ์ ์ด ์•„๋‹Œ๊ฐ€ ์‹ถ์€๋ฐ,, ์ œ๊ฐ€ ์ž˜๋ชป์ดํ•ดํ•œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์–ด์š”..! ๐Ÿ”ฎ

์•— ์ œ๊ฐ€ ์ƒ๊ฐํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ƒํ™ฉ์„ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

๋ธ”๋ž™์žญ ๋ฒ ํŒ… ๊ธฐ๋Šฅ์„ ๋งŒ๋“ ๋‹ค๊ณ  ํ–ˆ์„๋•Œ, ์•„๋ž˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณผ๊ฒŒ์š”!

public void receivePlayerBets(int playerIndex, Money money) {
    Player player = players.getPlayerByIndex(playerIndex);
    /*์ดํ•˜ ์ƒ๋žต*/
}
  1. BlackjackService์— receivePlayerBets()๋ฅผ ๋งŒ๋“ค๊ณ  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  2. receviePlayerBets()๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. ์ด๋•Œ, Money VO๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Money VO๋ฅผ ๋งŒ๋“ค๋Ÿฌ ๊ฐ„๋‹ค.
  3. Money ์ƒ์„ฑ์ž์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  4. Money๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
  5. receviePlayerBets()๋กœ ๋Œ์•„์™€ ๋‹ค์‹œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค.
  6. players.getPlayerByIndex()๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Player ๋„๋ฉ”์ธ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.
  7. getPlayerByIndex() ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  8. getPlayerByIndex()๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
  9. receivePlayerBets()์œผ๋กœ ๋Œ์•„์™€ ๊ธฐ๋Šฅ์„ ์™„์„ฑํ•œ๋‹ค.

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

@yeo-li
Copy link
Author

yeo-li commented Mar 17, 2026

  1. ์ข‹์€ ์„ค๊ณ„์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•ด์š”!
    ์ฝ˜์†” ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๊ฐ์ฒด๊ฐ„ ํ˜‘๋ ฅ์ด ์ค‘์š”ํ•˜๊ฒŒ ์ž‘์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ์ €๋Š” ์ฒ˜์Œ์—” ๋ฌด์กฐ๊ฑด MVC ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์„ ํ–ˆ์—ˆ๋Š”๋ฐ, ๋ฌด์กฐ๊ฑด ์ •๋‹ต์ธ ๋””์ž์ธ ํŒจํ„ด์€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ์–ด์š”๐Ÿซข ์ฝ˜์†” ํ”„๋กœ๊ทธ๋žจ, ์›น ์„œ๋ฒ„ ์ฒ˜๋Ÿผ ๊ตฌํ˜„ ์žฅ์†Œ๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์—์„œ๋„ ์ข‹์€ ์„ค๊ณ„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ค ํƒœ๋„๋‚˜ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ์š”? ๊ทธ๋ฆฌ๊ณ  ์„ค๊ณ„์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ ์‹ถ์€๋ฐ, ๊ณต๋ถ€ํ•˜๊ธฐ ์ข‹์€ ์ฑ…๋„ ์ถ”์ฒœํ•ด์ฃผ์‹œ๋ฉด ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.โ˜บ๏ธ

ํƒœ๋„๋Š” ๋ชจ๋‘๊ฐ€ ๋งž๋‹ค๊ณ  ํ•ด๋„ ์˜์‹ฌํ•ด๋ณด๊ธฐ & ์—ด๋ฆฐ ๋งˆ์Œ์ด ์ค‘์š”ํ•  ๊ฒƒ ๊ฐ™๊ณ ์š”~ ์‚ฌ์‹ค ๋””์ž์ธ ํŒจํ„ด์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŽ์€ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•˜๋‹ค๋ณด๋‹ˆ ์ด๋Ÿฐ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•  ๋•Œ์—๋Š” ์ด๋ ‡๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜๋„ ์žˆ๋‹ค~ ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ๋‚˜์˜จ๊ฑฐ๋ผ์„œ ๋ชจ๋“  ์š”๊ตฌ์‚ฌํ•ญ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ์ •๋‹ต๋„ ์•„๋‹ˆ์—์š”. ์ฑ…์€ ์ง€๊ธˆ ๋ ˆ๋ฒจ์—์„œ ์ฝ์„๋งŒํ•œ๊ฑด https://product.kyobobook.co.kr/detail/S000001062523 ์š”๊ฑฐ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

ํ”ผ๋“œ๋ฐฑ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!! ์ด๋ฒˆ์ฃผ์— ํ•™๊ต์—์„œ ์ฑ… ๋นŒ๋ ค์„œ ์ฝ์–ด๋ด์•ผ๊ฒ ์–ด์š”!

@yeo-li
Copy link
Author

yeo-li commented Mar 17, 2026

๋ฆฌ๋ทฐ์–ด์—๊ฒŒ
์•ˆ๋…•ํ•˜์„ธ์š” ์ฃผ๋””!
์‚ฌ์ดํด1์—์„œ ์†Œ์ค‘ํ•œ ํ”ผ๋“œ๋ฐฑ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ด์š”โ˜บ๏ธ
์‚ฌ์ดํด2์—์„œ๋Š” ์‚ฌ์ดํด1์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ชจ๋‘ ์ ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ์™„์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค!
์‚ฌ์ดํด2์—์„œ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ข‹์€ ์„ค๊ณ„, ๊ฐœ๋ฐœ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์‹๊ณผ ํƒœ๋„์ž…๋‹ˆ๋‹ค.
์‚ฌ์‹ค ์•„์ง ์œ„์— ๋Œ€ํ•ด ๊ฐˆํ”ผ๋ฅผ ๋ชป์žก๊ณ  ์žˆ์–ด์š”๐Ÿฅบ ์ ˆ๋Œ€์ ์ธ ์ •๋‹ต์ด ์—†๋‹ค๋ฉด ์ •๋‹ต์ด ์—†๋Š” ๊ณณ์—์„œ ์ •๋‹ต์„ ๋„์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ์š”?
๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ์—๋Š” ์„ธ์„ธํ•œ ๋ถ€๋ถ„๋ณด๋‹จ, ๊ฐœ๋ฐœ์˜ ๊ฑฐ์‹œ์ ์ธ ๊ด€์ ์—์„œ ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„์ด ์žˆ์—ˆ์–ด์š”!
๋ฌผ๋ก  ์ฝ”๋“œ์—์„œ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„๋“ค์— ๋Œ€ํ•ด์„œ๋„ ์–ธ์ œ๋“ ์ง€ ํ”ผ๋“œ๋ฐฑ ํ•ด์ฃผ์‹œ๋ฉฐ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!
์ด๋ฒˆ ์ฃผ๋„ ์ข‹์€ ์ผ๋งŒ ์žˆ๊ธธ ๋ฐ”๋ผ๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿ€

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

๋‹ค๋งŒ ์ง€๊ธˆ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ๋ฐฐ์›Œ๊ฐ€๋Š” ๊ณผ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์ •๋‹ต์„ ์ฐพ์œผ๋ ค๊ณ  ํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ๋‹ค์–‘ํ•œ ์„ ํƒ์ง€๋ฅผ ์ง์ ‘ ๊ฒฝํ—˜ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๋ง์”€ํ•ด์ฃผ์‹  ๊ฒƒ์ฒ˜๋Ÿผ ์ •๋‹ต์ด ์—†๋Š” ๋ฌธ์ œ๋ผ๋„ ํ•ญ์ƒ ์—ฌ๋Ÿฌ ์„ ํƒ์ง€๋Š” ์กด์žฌํ•˜์ž–์•„์š”~ ๊ทธ ์„ ํƒ์ง€๋“ค์„ ์ง์ ‘ ์ ์šฉํ•ด๋ณด๊ณ , ์–ด๋–ค ๋ฐฉ์‹์ด ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์€์ง€ ๊ฒฝํ—˜์„ ํ†ตํ•ด ๊นจ๋‹ซ๋Š” ๊ณผ์ •์ด ํฐ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์˜ ๊ฑฐ์‹œ์ ์ธ ๊ด€์ ์—์„œ ๊ถ๊ธˆํ•˜๋‹ค๊ณ  ๋ง์”€ํ•ด์ฃผ์…จ๋Š”๋ฐ, ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ๋ถ€๋ถ„์ด ๊ถ๊ธˆํ•˜์‹ ์ง€ ์กฐ๊ธˆ ๋” ์•Œ ์ˆ˜ ์žˆ์„๊นŒ์š”? ํ˜น์€ PR์— ์ž‘์„ฑํ•ด์ฃผ์‹  ๋ถ€๋ถ„์ผ๊นŒ์š”?

์ œ๊ฐ€ ์ƒ๊ฐํ•œ ๊ฑฐ์‹œ์ ์ธ ๊ด€์ ์€ pr์— ์ž‘์„ฑํ•œ ๋ถ€๋ถ„๊ณผ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ณ์ ์ธ ๋ถ€๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค! ์ฃผ๋””๊ฐ€ ์ด์•ผ๊ธฐ ํ•ด์ฃผ์‹  ๊ฒƒ ์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ ๊ฒฝํ—˜์„ ํ•˜๋ฉด์„œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„, ์ข‹์•˜๋˜ ๋ถ€๋ถ„๋“ค์„ ์ •๋ฆฌํ•˜๋ฉด ๋งŽ์ด ์„ฑ์žฅํ•  ๊ฒƒ ๊ฐ™์•„์š”:)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants