Skip to content

[๐Ÿš€ ์‚ฌ์ดํด2 - ๋ฏธ์…˜ (๊ธฐ๋ฌผ ํ™•์žฅ + DB ์ ์šฉ)] ๋ชจ์นด ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.#275

Open
softmoca wants to merge 20 commits intowoowacourse:softmocafrom
softmoca:step2

Conversation

@softmoca
Copy link
Copy Markdown

@softmoca softmoca commented Apr 3, 2026

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

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

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

์•ˆ๋…•ํ•˜์„ธ์š” ๋‘๋‘  ! ๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ
์ด๋ฒˆ PR์€ ์ด์ „๊ณผ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

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

ํ•˜์ง€๋งŒ ์ด๋ฒˆ ์‚ฌ์ดํด2์—์„œ DB ๊ธฐ๋Šฅ์„ ๊ณ ๋ คํ•˜๋ฉฐ, ์‚ฌ์ „์— ๊ณต๋ถ€ํ•˜๊ณ  ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ์ด ๋งŽ๋‹ค ๋ณด๋‹ˆ ๋„ˆ๋ฌด ๊ณผํ•˜๊ฒŒ ์ง„ํ–‰ ์†๋„๊ฐ€ ํฌ๊ฒŒ ๋А๋ ค์กŒ๊ณ  TDD ์‚ฌ์ดํด ๋˜ํ•œ ์ œ๋Œ€๋กœ ์œ ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ DB ์„ค๊ณ„๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฐˆ์•„์—Ž์œผ๋ฉด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ธฐ๋ณด๋‹ค ๊ธฐ๋Šฅ ๊ตฌํ˜„ โ†’ ์ฝ˜์†” ๊ฒ€์ฆ โ†’ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ํ˜•ํƒœ๋กœ ํ๋ฅด๊ฒŒ ๋˜์—ˆ๊ณ , ์ด ๊ณผ์ •์—์„œ ๊ธฐ์กด ํ•™์Šต ๋ฐฉ์‹์— ๋Œ€ํ•œ ํ•œ๊ณ„๋ฅผ ๋А๋ผ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋™์‹œ์— ๋„ค์˜ค์™€์˜ 1on1, ๋ธŒ๋ผ์šด์˜ ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ํ•™์Šต ๋ฐฉํ–ฅ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๐Ÿ‘‰ โ€œ์™„๋ฒฝํ•˜๊ฒŒ ๊ณ ๋ฏผํ•˜๊ณ  ์‹œ์ž‘ํ•˜๊ธฐโ€๋ณด๋‹ค โ€œ๋ถ€์กฑํ•˜๋”๋ผ๋„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ , ์ž์ฃผ ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ๋ฐฉํ–ฅ์„ ์žก์•„๊ฐ€๊ธฐโ€

๊ทธ๋ž˜์„œ ์ด๋ฒˆ PR์€ ์ด์ „์ฒ˜๋Ÿผ ์ •๋ฆฌ๋œ ์„ค๊ณ„๋ฅผ ๊ฒ€์ฆ๋ฐ›๊ธฐ ์œ„ํ•œ PR์ด ์•„๋‹ˆ๋ผ,

๐Ÿ‘‰ ๊ตฌํ˜„ ๊ณผ์ •์—์„œ์˜ ๊ณ ๋ฏผ, ํ™•์‹ ์ด ์—†๋Š” ์„ ํƒ, ํ˜ผ๋ž€์Šค๋Ÿฌ์› ๋˜ ์ง€์ ์„ ๊ทธ๋Œ€๋กœ ๋“œ๋Ÿฌ๋‚ด๊ณ 
๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ํ•จ๊ป˜ ๋ฐฉํ–ฅ์„ ๋งž์ถฐ๋ณด๊ณ  ์‹ถ์€ PR์ž…๋‹ˆ๋‹ค.

์ฆ‰,
๊ธฐ์กด: โ€œ์ด๋ ‡๊ฒŒ ์„ค๊ณ„ํ–ˆ๋Š”๋ฐ ๋งž๋Š”์ง€ ๊ฒ€์ฆํ•ด์ฃผ์„ธ์š”โ€
์ด๋ฒˆ: โ€œ์ด๋ ‡๊ฒŒ ํ•ด๋ดค๋Š”๋ฐ ์ด ๋ฐฉํ–ฅ์ด ๊ดœ์ฐฎ์€์ง€ ํ•จ๊ป˜ ์†Œํ†ตํ•˜๋ฉฐ ์—ฌ๋Ÿฌ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด ๋Œ€ํ™”ํ•˜๊ณ  ๊ณ ๋ฏผํ•ด๋ณด๋ณด๊ณ  ์‹ถ์–ด์š” !!โ€
๋กœ ๋ฐ”๋€Œ์–ด ์ด๋ ‡๊ฒŒ๋ฐ”๋€ ์Šคํƒ€์ผ์„ ํ†ตํ•ด ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ผ๋งˆ๋‚˜ ์–ด๋–ป๊ฒŒ ์–ป๋Š”์ง€ ๊ฒฝํ—˜ํ•ด๋ณด๊ณ ์ž ํ•ด์š” !

์ด์ „ PR๊ณผ ์Šคํƒ€์ผ์ด ๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ์ด ๋ถ€๋ถ„์ด๋ฉฐ,
์ด๋Ÿฌํ•œ ๋งฅ๋ฝ์„ ์ฐธ๊ณ ํ•ด์„œ ๋ฆฌ๋ทฐํ•ด์ฃผ์‹œ๋ฉด ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ™‡๐Ÿปโ€โ™‚๏ธ

์ข‹์€ ํ”ผ๋“œ๋ฐฑ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๐Ÿ™

๊ณ ๋ฏผํ•˜๊ณ  ํ˜ผ๋ž€์Šค๋Ÿฌ์› ๋˜ ์ง€์ ๋“ค

๊ถ์„ฑ(Palace)์„ ๋ณ„๋„ ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌํ•œ ์ด์œ 

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

MoveRule์ด Palace๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  BoardView๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋„๋ก ํ•œ ์ด์œ 

  • ์ฒ˜์Œ์—๋Š” 5๊ฐœ์˜ MoveRule(์ด Palace๋ฅผ ์ง์ ‘ importํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ์—์„œ Palace์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด 5๊ฐœ ํŒŒ์ผ์„ ๋ชจ๋‘ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ดํด1์—์„œ ๋‹คํ˜•์„ฑ์œผ๋กœ "๊ธฐ๋ฌผ๋ณ„ ๊ทœ์น™์ด ๋…๋ฆฝ์ ์ด์–ด์„œ ๋ณ€๊ฒฝ ๋ฒ”์œ„๊ฐ€ ์ž‘๋‹ค"๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, Palace ์˜์กด์œผ๋กœ ์ธํ•ด ๊ทธ ์žฅ์ ์ด ์•ฝํ•ด์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ์ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค
  • ๊ทธ๋ž˜์„œ BoardView์— ๊ถ์„ฑ ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , Board๊ฐ€ ๋‚ด๋ถ€์—์„œ Palace์— ์œ„์ž„ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝํ•ด์„œ MoveRule๋“ค์€ BoardView ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•ด์„œ, Palace๊ฐ€ ๋ณ€๊ฒฝ ๋˜์–ด๋„ Board ํ•œ๊ณณ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์žฅ๊ณผ ์‚ฌ์˜ MoveRule์„ ๋ถ„๋ฆฌํ•œ ์ด์œ 

  • ํ˜„์žฌ ์žฅ๊ณผ ์‚ฌ์˜ ์ด๋™ ๊ทœ์น™์€ ์™„์ „ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—๋Š” PalaceMoveRule ํ•˜๋‚˜๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ "์ฝ”๋“œ๊ฐ€ ์ง€๊ธˆ ๊ฐ™๋‹ค"๋Š” ๊ฒƒ๊ณผ "๊ฐ™์€ ์ด์œ ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค"๋Š” ๊ฒƒ์€ ๋‹ค๋ฅด๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ์‚ฌ์˜ ๊ทœ์น™๋งŒ 2์นธ ์ด๋™์œผ๋กœ ๋ฐ”๋€๋‹ค๋ฉด, ํ•ด๋‹น ๊ณต์œ  ๊ตฌ์กฐ์—์„œ๋Š” PalaceMoveRule์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๊ณ  ์žฅ๋„ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์—ˆ๋‹ค๋ฉด AdvisorMoveRule 1๊ฐœ ํŒŒ์ผ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋˜ํ•œ ์‚ฌ์ดํด1 ๊ทœ์น™ "๋ณ€๊ฒฝ ์ด์œ ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋ถ„๋ฆฌํ•œ๋‹ค"์™€ ๋”ฑ ๋งž๋Š” ์ƒํ™ฉ์ด๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ค์–ด KingMoveRule๊ณผ AdvisorMoveRule๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

pieceType enum์„ ๋„์ž…ํ•œ ์ด์œ 

  • ์‚ฌ์ดํด 1 PR์— ๋„์ž…์„ ํ–ˆ๋‹ค๊ฐ€ ์ œ๊ฑฐ๋ฅผ ํ–ˆ์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ๊ทธ ์—ญํ• ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ธฐ๋ฌผ์˜ toString()์€ "์ฐจ", "๋งˆ" ๊ฐ™์€ ํ•œ๊ธ€ ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์ด๊ฑธ ๊ทธ๋Œ€๋กœ ๋ฐ”๋กœ DB ์ €์žฅ์— ์‚ฌ์šฉํ•˜๋ฉด ํ‘œ์‹œ์šฉ ํ‘œํ˜„๊ณผ ์ €์žฅ์šฉ ์‹๋ณ„์ž๊ฐ€ ๊ฒฐํ•ฉ์ด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ดํ›„ ํ™”๋ฉด ์ถœ๋ ฅ์„ ํ•œ์ž ํ˜น์€ ์˜์–ด๋กœ ๋ฐ”๊พธ๋ฉด DB์— ์ด๋ฏธ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์™€ ๋ถˆ์ผ์น˜๊ฐ€ ์ƒ๊ธธ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ PieceType enum์€ ์ €์žฅ(Piece โ†’ ๋ฌธ์ž์—ด)๊ณผ ๋ณต์›(๋ฌธ์ž์—ด โ†’ Piece) ๋ณ€ํ™˜ ์ฑ…์ž„์„ ๊ฐ€์ ธ DB ์ €์žฅ/๋ณต์› ์šฉ๋„๋กœ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Board์˜ ๋‚ด๋ถ€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ Map์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋” ์ข‹์•˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ

  • ์ด๋ฒˆ ์‚ฌ์ดํด2๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ, Board์˜ ๋‚ด๋ถ€ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ List<List<Piece>>๊ฐ€ ์•„๋‹ˆ๋ผ Map<Position, Piece>์˜€๋‹ค๋ฉด ๋” ์ž์—ฐ์Šค๋Ÿฌ์› ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ์ž์ฃผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
    ํ˜„์žฌ Board๋Š” ์™ธ๋ถ€์™€ ์†Œํ†ตํ•  ๋•Œ ๊ฑฐ์˜ ํ•ญ์ƒ Map์„ ๊ฑฐ์น˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    ๋“ค์–ด์˜ฌ ๋•Œ๋Š” Board.of(Map)์œผ๋กœ Map์„ ๋ฐ›์•„์„œ ๋‚ด๋ถ€ List๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๋‚˜๊ฐˆ ๋•Œ๋Š” findAllPieces()๋กœ ๋‚ด๋ถ€ List๋ฅผ ์ˆœํšŒํ•ด์„œ Map์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์—์„œ Board๋ฅผ ๋งŒ๋“ค ๋•Œ๋„, DB์—์„œ ๋ณต์›ํ•  ๋•Œ๋„, DB์— ์ €์žฅํ•  ๋•Œ๋„ ์ „๋ถ€ Map์„ ๊ฒฝ์œ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์–‘๋ฐฉํ–ฅ์—์„œ ๋งค๋ฒˆ ๋ณ€ํ™˜์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ๋‚ด๋ถ€๊ฐ€ Map์ด์—ˆ๋‹ค๋ฉด Board.of()๋Š” ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๋ฉด ๋˜๊ณ , findAllPieces()๋Š” ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋งŒ ํ•˜๋ฉด ๋˜๊ณ , ๋นˆ ์นธ์„ ์œ„ํ•ด 90์นธ ์ค‘ 58๊ฐœ์˜ EmptyPosition ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ํ•„์š”๋„ ์—†์–ด์งˆ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๋ถ„๋ช… ์‚ฌ์ดํด1 ์‚ฌ์ „ํ•™์Šต์—์„œ ์—ฌ๋Ÿฌ ์ƒํ™ฉ๋“ค์„ ๊ณ ๋ คํ•ด๋ณด๊ณ  "์žฅ๊ธฐํŒ์€ ๊ณ ์ • ๊ฒฉ์ž ๊ตฌ์กฐ์ด๊ณ , ์ดˆ๊ธฐ ๋ฐฐ์น˜๋ฅผ ๋ˆˆ์œผ๋กœ ๋Œ€์‘ํ•˜๊ธฐ ์‰ฝ๋‹ค"๋Š” ์ด์œ ๋กœ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ํƒํ–ˆ๊ณ , ๊ทธ ์‹œ์ ์—์„œ๋Š” ํ•ฉ๋ฆฌ์ ์ธ ํŒ๋‹จ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ DB ์—ฐ๋™, ํ…Œ์ŠคํŠธ์šฉ ํŒฉํ† ๋ฆฌ, ๊ธฐ๋ฌผ ๋ชฉ๋ก ์ถ”์ถœ ๊ฐ™์€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ์ด ํ™•์žฅ๋˜๋ฉด์„œ Board๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์ด ๋ชจ๋‘ "์œ„์น˜ โ†’ ๊ธฐ๋ฌผ" ๋งคํ•‘์ธ ๊ตฌ์กฐ๊ฐ€ ํ›จ์”ฌ ์ข‹์€ ์„ ํƒ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋‚ด๋‚ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
    ์ด๊ฒƒ์€ ์ฒ˜์Œ ์„ค๊ณ„๊ฐ€ ํ‹€๋ ธ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€ํ•˜๋ฉด์„œ ๋” ์ ํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋“œ๋Ÿฌ๋‚œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ์งˆ๋ฌธ

๊ถ์„ฑ(Palace)์„ ๋ณ„๋„ ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌํ•œ ์ด์œ  ๊ด€๋ จ ์งˆ๋ฌธ ๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ

  • ์ฒ˜์Œ์—๋Š” ์‚ฌ์ดํด1์˜ ํ•ต์‹ฌ์ด์—ˆ๋˜ "ํ•œ ๊ธฐ๋ฌผ์˜ ๊ทœ์น™์ด ๋ฐ”๋€Œ๋ฉด ๊ทธ ํŒŒ์ผ ํ•˜๋‚˜๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค"๋Š” ์žฅ์ ์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์–ด์„œ, MoveRule ๋‚ด๋ถ€์—์„œ ๊ถ์„ฑ ์ขŒํ‘œ๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•œ ๊ธฐ๋ฌผ์˜ MoveRule ์ฝ”๋“œ๊ฐ€ 300์ค„์ด ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ , ๊ถ์„ฑ ๊ด€๋ จ ์ƒ์ˆ˜์™€ ํŒ๋ณ„ ๋กœ์ง์ด 5๊ฐœ์˜ MoveRule์— ์ค‘๋ณต์œผ๋กœ ๋“ค์–ด๊ฐ€์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Palace๋ผ๋Š” ๋ณ„๋„ ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ถ์„ฑ ๊ตฌ์กฐ ํŒ๋ณ„ ์ฑ…์ž„๋งŒ ๋งก๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ์ด ๊ฒฐ์ •์„ ํ•˜๋ฉด์„œ ๋ชจ์ˆœ์ ์ธ ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฒ˜์Œ ๊ตฌ์ƒ๋Œ€๋กœ ๊ฐ MoveRule์ด ๊ถ์„ฑ ๋กœ์ง์„ ์ง์ ‘ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด, ํ•œ ๊ธฐ๋ฌผ์˜ ๊ทœ์น™์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๊ทธ ํŒŒ์ผ ํ•˜๋‚˜๋งŒ ์ˆ˜์ •ํ•˜๊ณ  ๊ทธ ํŒŒ์ผ์˜ ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋งŒ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์ด ์ „ํŒŒ๋˜๋Š” ์ง€์ ์ด 1๊ณณ์ด๋ผ ์œ ์ง€๋ณด์ˆ˜์— ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ฉด ํ˜„์žฌ ๊ตฌ์กฐ์—์„œ๋Š” ๊ถ์„ฑ์˜ ๊ทœ์น™์ด ๋ณ€๊ฒฝ๋˜๋ฉด, ๊ถ์„ฑ ๋กœ์ง์„ ์ฐธ์กฐํ•˜๋Š” 5๊ฐœ์˜ ๊ธฐ๋ฌผ(์žฅ/์‚ฌ/์ฐจ/ํฌ/์กธ)์„ ๋ชจ๋‘ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์ง€์ ์ด ๋Š˜์–ด๋‚˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๋‚˜๋น ์ง„๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋™์‹œ์— ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์˜ ์ƒ๊ฐ๋„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ํฌ์ธํŠธ๊ฐ€ 5๊ณณ์œผ๋กœ ๋Š˜์–ด๋‚˜๋”๋ผ๋„, ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ํ•˜๋‚˜ํ•˜๋‚˜์˜ ํŒŒ์ผ์€ ๊ถ์„ฑ ๋กœ์ง์ด ๋น ์ ธ์žˆ์–ด ์ฝ”๋“œ๋Ÿ‰์ด ์ž‘๊ณ , ๊ฐ๊ฐ์˜ ๋‹จ์œ„ํ…Œ์ŠคํŠธ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ •๊ตํ•˜๊ฒŒ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ "๋ณ€๊ฒฝ ์ง€์ ์€ ๋Š˜์—ˆ์ง€๋งŒ, ๊ฐ ์ง€์ ์˜ ํŒŒ์•…๊ณผ ๊ฒ€์ฆ์€ ๋” ์‰ฌ์›Œ์กŒ๋‹ค"๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋ณ€๊ฒฝ ์ง€์ ์ด ์ ์€ ๊ฒƒ์ด ์ข‹์€์ง€, ๋ณ€๊ฒฝ ์ง€์ ์ด ๋งŽ๋”๋ผ๋„ ๊ฐ๊ฐ์ด ์ž‘๊ณ  ๋…๋ฆฝ์ ์ธ ๊ฒƒ์ด ์ข‹์€์ง€์— ๋Œ€ํ•ด ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

DB ๊ด€๋ จ ํ…Œ์ŠคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์งœ์•ผ ํ•˜๋Š”์ง€ ํ˜ผ๋™๊ด€๋ จ ์งˆ๋ฌธ ๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ

  • DB ๊ธฐ๋Šฅ์„ ์ ์šฉํ•˜๋ฉด์„œ PieceRepositoryTest, GameRepositoryTest, DBConnectionManagerTest, DBInitializerTest ๊ฐ™์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, ์ด ํ…Œ์ŠคํŠธ๋“ค์ด ๋ฌด์—‡์„ ์œ„ํ•œ ๊ฒƒ์ธ์ง€ ํ™•์‹ ์ด ๋“ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • ๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ๋Š” ๋ช…ํ™•ํ–ˆ์Šต๋‹ˆ๋‹ค. "์ฐจ๊ฐ€ ์ง์„ ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€", "ํฌ๊ฐ€ 1๊ฐœ๋ฅผ ๋„˜์–ด์•ผ ์ด๋™ ๊ฐ€๋Šฅํ•œ๊ฐ€" ๊ฐ™์€ ๊ทœ์น™์„ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด๊ณ , ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์ง€๋ฉด ๊ฒŒ์ž„ ๊ทœ์น™์ด ์ž˜๋ชป ๊ตฌํ˜„๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹คํŒจ ์›์ธ์ด ๋ถ„๋ช…ํ•˜๊ณ , ์ˆ˜์ •ํ•ด์•ผ ํ•  ๊ณณ๋„ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ฉด DB ํ…Œ์ŠคํŠธ๋Š” "์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋ฉด ๊ฐ™์€ ๊ฐ’์ด ๋‚˜์˜ค๋Š”๊ฐ€"๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋А๋‚Œ์ด์—ˆ์Šต๋‹ˆ๋‹ค. "์ƒˆ ๊ฒŒ์ž„์„ ์ €์žฅํ•˜๊ณ  ID๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค", "์ €์žฅํ•œ ๊ฒŒ์ž„์„ ID๋กœ ์กฐํšŒํ•œ๋‹ค" ๊ฐ™์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ, ์ด๊ฒƒ์ด JDBC API๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฑด์ง€, ๋‚ด๊ฐ€ SQL์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘์„ฑํ–ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฑด์ง€, ์•„๋‹ˆ๋ฉด ๋ณ€ํ™˜ ๋กœ์ง(๋„๋ฉ”์ธ โ†” DB)์ด ๋งž๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฑด์ง€ ๊ตฌ๋ถ„์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ์ € "ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ?"๋ผ๋Š” ์ƒ๊ฐ๋งŒ์œผ๋กœ ์ž‘์„ฑํ•œ ๋А๋‚Œ์ด ๋‚ด๋‚ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์ด ํ…Œ์ŠคํŠธ๋“ค์ด View๋‚˜ Controller ํ…Œ์ŠคํŠธ์ฒ˜๋Ÿผ ๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ์— ๋น„ํ•ด ํšจ์œจ์ด ์•„์ฃผ ๋‚ฎ์€ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹Œ๊ฐ€ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜น์€ Repository ๋‹จ์œ„๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, "๊ฒŒ์ž„์„ ์ƒ์„ฑํ•˜๊ณ  โ†’ ๊ธฐ๋ฌผ์„ ์ด๋™ํ•˜๊ณ  โ†’ ํ”„๋กœ๊ทธ๋žจ์„ ์žฌ์‹œ์ž‘ํ•˜๊ณ  โ†’ ์ด์–ดํ•˜๊ธฐ๋กœ ๋ณต์›ํ–ˆ์„ ๋•Œ ์ƒํƒœ๊ฐ€ ์ผ์น˜ํ•˜๋Š”๊ฐ€"์ฒ˜๋Ÿผ Game๊ณผ Board๋ฅผ ํฌํ•จํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์—์„œ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฑด์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. DB ๊ด€๋ จ ํ…Œ์ŠคํŠธ๋Š” ์–ด๋–ค ๊ด€์ ์—์„œ, ์–ด๋–ค ๋ฒ”์œ„๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ธ์ง€ ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

TDD ๊ณผ์ •์—์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ†ต๊ณผํ•ด๋ฒ„๋ฆฐ ๊ฒฝํ—˜ ๊ด€๋ จ ์งˆ๋ฌธ ๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ

  • ์‚ฌ์ดํด2์—์„œ ํฌ(Cannon)์˜ ๊ถ์„ฑ ๋Œ€๊ฐ์„  ๊ทœ์น™์„ TDD๋กœ ๊ตฌํ˜„ํ•˜๋˜ ์ค‘ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์ƒํ™ฉ์„ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค.๊ถ์„ฑ ๋Œ€๊ฐ์„  ์ด๋™์ด ๊ฐ€๋Šฅํ•œ ์ผ€์ด์Šค(๊ธฐ๋ฌผ 1๊ฐœ๋ฅผ ๋„˜์–ด ์ด๋™)๋ฅผ ๋จผ์ € ๊ตฌํ˜„ํ•œ ๋’ค, ์‹คํŒจํ•ด์•ผ ํ•  ์ผ€์ด์Šค๋“ค์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. "์ค‘๊ฐ„์— ๊ธฐ๋ฌผ์ด ์—†์œผ๋ฉด ์ด๋™ ๋ถˆ๊ฐ€", "๋‹ค๋ฆฌ๊ฐ€ ํฌ์ด๋ฉด ์ด๋™ ๋ถˆ๊ฐ€", "๋„์ฐฉ ์นธ์— ํฌ๊ฐ€ ์žˆ์œผ๋ฉด ์ด๋™ ๋ถˆ๊ฐ€", "1์นธ ๋Œ€๊ฐ์„ ์€ ๋„˜์„ ๊ธฐ๋ฌผ์ด ์—†์œผ๋ฏ€๋กœ ์ด๋™ ๋ถˆ๊ฐ€" ๊ฐ™์€ ํ…Œ์ŠคํŠธ๋“ค์ž…๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ์ด ํ…Œ์ŠคํŠธ๋“ค์ด ๋นจ๊ฐ„๋ถˆ์ด ๋‚˜์™€์•ผ ํ–ˆ๋Š”๋ฐ, ์ž‘์„ฑํ•˜์ž๋งˆ์ž ํŒŒ๋ž€๋ถˆ์ด ๋–ด์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ๊ธฐ์กด ์ง์„  ์ด๋™ ๋กœ์ง์˜ ๊ฒ€์ฆ์—์„œ ์ด๋ฏธ ๊ฑธ๋Ÿฌ์ง€๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ถ์„ฑ ๋Œ€๊ฐ์„ ์€ ์ง์„ ์ด ์•„๋‹ˆ๋ฏ€๋กœ isStraightLine ๊ฒ€์‚ฌ์—์„œ false๊ฐ€ ๋˜๊ณ , ๊ถ์„ฑ ๋Œ€๊ฐ์„  ์กฐ๊ฑด๋„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋ฉด ์ตœ์ข…์ ์œผ๋กœ false๊ฐ€ ๋ฐ˜ํ™˜๋˜์–ด ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ์ œ๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ๊ถ์„ฑ ๋กœ์ง์ด ์•„๋‹ˆ๋ผ ๊ธฐ์กด ๋กœ์ง์ด ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด ๊ฒฝํ—˜์—์„œ ์—ฌ๋Ÿฌ ํ˜ผ๋ž€์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.
  • ์ฒซ์งธ, ์ด ํ…Œ์ŠคํŠธ๋“ค์€ CannonMoveRule ์ „์ฒด์˜ ๋™์ž‘์„ ๊ฒ€์ฆํ•˜๋Š” ํ†ตํ•ฉํ…Œ์ŠคํŠธ ์„ฑ๊ฒฉ์ธ๋ฐ, ์ œ๊ฐ€ ์˜๋„ํ•œ ๊ฒƒ์€ "๊ถ์„ฑ ๋Œ€๊ฐ์„  ๊ทœ์น™"๋งŒ ๋‹จ์œ„๋กœ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์„ ์ž˜๋ชป ์žก์€ ๊ฒƒ์ธ์ง€, ์•„๋‹ˆ๋ฉด ์ด๋Ÿฐ ํ˜•ํƒœ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฒƒ์ธ์ง€ ํŒ๋‹จ์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • ๋‘˜์งธ, ๊ถ์„ฑ ๋Œ€๊ฐ์„ ์˜ ์‹คํŒจ ์ผ€์ด์Šค๋ฅผ CannonMoveRule์—์„œ ํ…Œ์ŠคํŠธํ•  ๊ฒƒ์ธ์ง€, Palace ํ…Œ์ŠคํŠธ์—์„œ๋งŒ ๊ฒ€์ฆํ•˜๊ณ  ๋ฏฟ์„ ๊ฒƒ์ธ์ง€ ์• ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค. Palace์—์„œ ์ด๋ฏธ "๊ถ์„ฑ ๋ฐ–์ด๋ฉด false", "๋Œ€๊ฐ์„  ์„ ์ด ์•„๋‹ˆ๋ฉด false"๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ๋Š”๋ฐ, CannonMoveRule์—์„œ ๋น„์Šทํ•œ ๋งฅ๋ฝ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋˜ ์ž‘์„ฑํ•˜๋‹ˆ ์ค‘๋ณต์ด๋ผ๋Š” ๋А๋‚Œ์ด ๊ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์…‹์งธ, ์ด๋Ÿฐ ์ค‘๋ณต์ ์ธ ํ…Œ์ŠคํŠธ๊ฐ€ ์œ ์ง€๋ณด์ˆ˜์— ์˜คํžˆ๋ ค ๋…์ด ๋  ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ถ์„ฑ ๊ทœ์น™์ด ๋ณ€๊ฒฝ๋˜๋ฉด Palace ํ…Œ์ŠคํŠธ๋„ ์ˆ˜์ •ํ•˜๊ณ , CannonMoveRule ํ…Œ์ŠคํŠธ๋„ ์ˆ˜์ •ํ•˜๊ณ , TankMoveRule ํ…Œ์ŠคํŠธ๋„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ๋˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ๋Š” "์•ˆ์ „๋ง"์ด ์•„๋‹ˆ๋ผ "๋ณ€๊ฒฝ์„ ๋ฐฉํ•ดํ•˜๋Š” ์ง"์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.
  • TDD์—์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ๋กœ์ง์ด ๊ธฐ์กด ๋กœ์ง์— ์˜ํ•ด ์ด๋ฏธ ํ†ต๊ณผ๋˜์–ด ๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ, ๊ทธ ํ…Œ์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ•˜์œ„ ๊ฐ์ฒด(Palace)์—์„œ ์ด๋ฏธ ๊ฒ€์ฆํ•œ ๋‚ด์šฉ์„ ์ƒ์œ„ ๊ฐ์ฒด(CannonMoveRule)์—์„œ ๋‹ค์‹œ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด ์ค‘๋ณต์ธ์ง€ ์•ˆ์ „๋ง์ธ์ง€์— ๋Œ€ํ•ด ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

softmoca added 20 commits April 1, 2026 09:27
- ๊ถ์„ฑ ๋‚ด๋ถ€ ์ขŒํ‘œ ํŒ๋ณ„ ๊ธฐ๋Šฅ
- ๊ถ์„ฑ ๋Œ€๊ฐ์„  1์นธ ์ด๋™ ๊ฐ€๋Šฅ ํŒ๋ณ„ ๊ธฐ๋Šฅ
- ๋Œ€๊ฐ์„  ์ด๋™์€ ์ค‘์•™์„ ๊ผญ ๊ฑฐ์ณ์•ผํ•จ
- BoardView์— ๊ถ์„ฑ ๊ด€๋ จ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
- Board๊ฐ€ Palace์— ์œ„์ž„ํ•˜์—ฌ BoardView ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
- ๋ชจ๋“  MoveRule์ด BoardView ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•˜๋„๋ก ๋ณ€๊ฒฝ
- Palace ๋ณ€๊ฒฝ ์‹œ ์˜ํ–ฅ ๋ฒ”์œ„๊ฐ€ Board ํ•œ ๊ณณ์œผ๋กœ ์ œํ•œ๋จ !
- ์žฅ๊ณผ ์‚ฌ๊ฐ€ ๋™์ผํ•œ PalaceMoveRule์„ ๊ณต์œ ํ•˜๋˜ ๊ตฌ์กฐ๋ฅผ ๋ถ„๋ฆฌ
- ์ดํ›„ ์‚ฌ์˜ ์ด๋™ ๊ทœ์น™ ๋ณ€๊ฒฝ์ด ์žฅ์—๊ฒŒ ์ „ํŒŒ๋˜์ง€ ์•Š๋„๋ก ๊ฐœ์„ 
- ๊ธฐ๋ฌผ๋ณ„ ๋ณ€๊ฒฝ ์ด์œ ์— ๋”ฐ๋ผ ์ด๋™ ๊ทœ์น™ ์ฑ…์ž„์„ ๋ถ„๋ฆฌ

- ๊ธฐ์กด์—๋Š” ์žฅ๊ณผ ์‚ฌ๊ฐ€ PalaceMoveRule์„ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ๊ถ์„ฑ ์ด๋™ ๊ทœ์น™์ด ๊ธฐ๋ฌผ๋งˆ๋‹ค ๋‹ฌ๋ผ์งˆ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ–ˆ์„ ๋•Œ ๊ณตํ†ต ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ๋Š” ๋ณ€๊ฒฝ์— ์ทจ์•ฝํ•œ ์„ค๊ณ„๋ผ๊ณ  ํŒ๋‹จ.
- ์‹ค์ œ๋กœ ์‚ฌ์˜ ์ด๋™ ๊ทœ์น™์ด ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ, PalaceMoveRule์„ ์ˆ˜์ •ํ•˜๋ฉด ์žฅ์˜ ์ด๋™ ๊ทœ์น™๊นŒ์ง€ ํ•จ๊ป˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ.
- ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด PalaceMoveRule์„ ์ œ๊ฑฐํ•˜๊ณ , ์žฅ๊ณผ ์‚ฌ๊ฐ€ ๊ฐ๊ฐ ์ž์‹ ์˜ ์ด๋™ ๊ทœ์น™์„ ๊ฐ€์ง€๋„๋ก ๋ถ„๋ฆฌ.
- ์ด๋กœ ์ธํ•ด ๊ฐ ๊ธฐ๋ฌผ์˜ ์ฑ…์ž„์ด ๋ช…ํ™•ํ•ด์ง€๊ณ , ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์˜ํ–ฅ ๋ฒ”์œ„๋ฅผ ํ•ด๋‹น ๊ธฐ๋ฌผ๋กœ ํ•œ์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ๋จ
- Palace์— 2์นธ ๋Œ€๊ฐ์„  ํŒ๋ณ„, ๊ฒฝ์œ ์ง€ ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- TankMoveRule์— ๊ถ์„ฑ ๋Œ€๊ฐ์„  ์ด๋™ ๋กœ์ง ์ถ”๊ฐ€
- Board.move()๊ฐ€ ์žกํžŒ ๊ธฐ๋ฌผ์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝ
- ์™• ์žกํž˜ ํŒ๋ณ„ ๋ฐ ์Šน์ž ๊ธฐ๋ก๊ธฐ๋Šฅ๊ตฌํ˜„
- Board์—์„œ ๊ธฐ๋ฌผ์ด ์žˆ๋Š” ์ขŒํ‘œ์™€ ๊ธฐ๋ฌผ ๋งต ๋ฐ˜ํ™˜
- PiceType์„์‚ฌ์šฉํ•ด DB๋ฌธ์ž์—ด๊ณผ ๊ธฐ๋ฌผ ๋ณ€ํ™˜
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.

1 participant