Skip to content

[๐Ÿš€ ์‚ฌ์ดํด1 - ๋ฏธ์…˜ (๋ณด๋“œ ์ดˆ๊ธฐํ™” + ๊ธฐ๋ฌผ ์ด๋™)] ๋ชจ์•„ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.#259

Open
picetea44 wants to merge 55 commits intowoowacourse:picetea44from
picetea44:step1

Conversation

@picetea44
Copy link
Copy Markdown

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

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

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

์•ˆ๋…•ํ•˜์„ธ์š” ๋น„๋ฐฅ!
์žฅ๊ธฐ ๋ฏธ์…˜ ์‚ฌ์ดํด1 ๋ฆฌ๋ทฐ ์ž˜ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค ๐Ÿ˜Š

Q1. searchRoute์˜ ์œ„์น˜์™€ ํƒ€์ž… ์บ์ŠคํŒ…

  • EmptyPiece๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ํ•„์š”๊ฐ€ ์—†๊ธฐ์— searchRoute ๋ฉ”์„œ๋“œ๋ฅผ Piece ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ ActivePiece ์ถ”์ƒ ํด๋ž˜์Šค์— ๋ฐฐ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด Board์—์„œ ((ActivePiece) piece).searchRoute(src, dest)์™€ ๊ฐ™์€ ๋‹ค์šด์บ์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋นˆ ๊ณต๊ฐ„์ด ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๋…ผ๋ฆฌ๋Š” ์œ ํšจํ•˜์ง€๋งŒ, ์‹คํ–‰ ์‹œ์ ์˜ ์บ์ŠคํŒ…์ด ์„ค๊ณ„์ƒ ์œ„ํ—˜ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Piece์— ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ๋กœ ๋‘” ๋‹ค์Œ EmptyPiece์—์„œ๋Š” ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋‘๋Š” ๊ฒƒ์ด ๋‚˜์„๊นŒ์š”, ์•„๋‹ˆ๋ฉด ํ˜„์žฌ์ฒ˜๋Ÿผ ํƒ€์ž…์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์„๊นŒ์š”?

Q2. ์˜๋ฏธ ์—†๋Š” ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

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

Q3. ๋ถˆ๋ณ€ ๊ฐ์ฒด์˜ Getter ์‚ฌ์šฉ

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

Q4. ๋ฐ˜์„ฑ

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

picetea44 and others added 30 commits March 25, 2026 15:31
Copy link
Copy Markdown

@pci2676 pci2676 left a comment

Choose a reason for hiding this comment

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

์•ˆ๋…•ํ•˜์„ธ์š”. ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ๋‹ฌ์•„๋‘์—ˆ์œผ๋‹ˆ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

์กฐ๊ธˆ ๋” ๊ฐœ์„ ํ•ด๋ณด๋ฉด ์ข‹์„ ๋ถ€๋ถ„์— ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ฒจ๋‘์—ˆ์œผ๋‹ˆ ๊ฐ™์ด ํ™•์ธํ•ด์ฃผ์„ธ์š”.

this.pieces = new HashMap<>(pieces);
}

public void move(Position src, Position dest) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

pieces.get(src)๊ฐ€ null์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, ๋ณด๋“œ์— ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ์œ„์น˜์—์„œ ์ด๋™์„ ์‹œ๋„ํ•˜๋ฉด ๋ฐ”๋กœ ๋‹ค์Œ ์ค„ validateCanMove์—์„œ piece.canMove()๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ NullPointerException์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. pieceAt() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋ ๊นŒ์š”?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

ํ™•์‹คํžˆ get()์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ๋ถˆํ•„์š”ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ง์”€ํ•ด์ฃผ์‹  ๊ฒƒ์ฒ˜๋Ÿผ, ๋ณด๋“œ์— ์—†๋Š” ์œ„์น˜์—์„œ null์ด ๋ฐ˜ํ™˜๋  ์ˆ˜ ์žˆ๊ณ , ๊ทธ ์ƒํƒœ๋กœ canMove()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ๋  ์—ฌ์ง€๊ฐ€ ์žˆ๋Š”๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด EmptyPiece๋ฅผ ๋งŒ๋“ค์–ด๋‘์—ˆ๋Š”๋ฐ, ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„ ๊ฐ™๋„ค์š”.

pieceAt()์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•˜๊ณ  ์˜๋„์—๋„ ๋งž๋Š” ์„ค๊ณ„๊ฐ™์Šต๋‹ˆ๋‹ค. ์ข‹์€ ์ง€์  ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

return team.forwardRowDirection();
}

public abstract List<Position> searchRoute(Position source, Position target);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Q1. searchRoute์˜ ์œ„์น˜์™€ ํƒ€์ž… ์บ์ŠคํŒ…
EmptyPiece๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ํ•„์š”๊ฐ€ ์—†๊ธฐ์— searchRoute ๋ฉ”์„œ๋“œ๋ฅผ Piece ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ ActivePiece ์ถ”์ƒ ํด๋ž˜์Šค์— ๋ฐฐ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด Board์—์„œ ((ActivePiece) piece).searchRoute(src, dest)์™€ ๊ฐ™์€ ๋‹ค์šด์บ์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋นˆ ๊ณต๊ฐ„์ด ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๋…ผ๋ฆฌ๋Š” ์œ ํšจํ•˜์ง€๋งŒ, ์‹คํ–‰ ์‹œ์ ์˜ ์บ์ŠคํŒ…์ด ์„ค๊ณ„์ƒ ์œ„ํ—˜ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Piece์— ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ๋กœ ๋‘” ๋‹ค์Œ EmptyPiece์—์„œ๋Š” ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋‘๋Š” ๊ฒƒ์ด ๋‚˜์„๊นŒ์š”, ์•„๋‹ˆ๋ฉด ํ˜„์žฌ์ฒ˜๋Ÿผ ํƒ€์ž…์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์„๊นŒ์š”?

์ด์•ผ๊ธฐํ•˜์‹ ๋Œ€๋กœ ๋‹ค์šด์บ์ŠคํŒ…์„ ๋Ÿฐํƒ€์ž„์— ํ•˜๋Š”๊ฒƒ์€ ๊ทธ๋ฆฌ ์ข‹์€ ๋ฐฉํ–ฅ์œผ๋กœ ๋ณด์ด์ง€๋Š” ์•Š์•„์š”. EmptyPiece์—์„œ๋Š” ๋นˆ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜๋Š”๊ฒŒ ์ข‹์„๊ฒƒ ๊ฐ™๋„ค์š”.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

๊ทธ๋ฆฌ๊ณ  EmptyPiece์—์„œ ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒŒ "์˜๋ฏธ ์—†๋Š” ๊ตฌํ˜„"์ฒ˜๋Ÿผ ๋А๊ปด์ง€์‹ค ์ˆ˜ ์žˆ์ง€๋งŒ, Board ์˜ canMove()์—์„œ ์ด๋ฏธ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ์œผ๋‹ˆ searchRoute๊นŒ์ง€ ๋„๋‹ฌํ•˜์ง€์•Š์„๊ฒƒ ๊ฐ™๋„ค์š”. ๊ทธ๋ ‡๋‹ค๋ฉด EmptyPiece์˜ searchRoute๊ฐ€ ์‹ค์ œ๋กœ ํ˜ธ์ถœ๋  ์ผ๋„ ์—†์–ด๋ณด์—ฌ์š”.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

๋ง์”€ํ•ด์ฃผ์‹  โ€œ์˜๋ฏธ ์—†๋Š” ๊ตฌํ˜„โ€์— ๋Œ€ํ•ด ๋งŽ์ด ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์„ ์งš์–ด์ฃผ์…”์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ƒ๊ฐํ•ด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ด๊ฑธ ์„ค๊ณ„๋กœ ์–ด๋–ป๊ฒŒ ํ’€์–ด๋‚ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผ์ด ๋งŽ์•„์ง€๋ฉด์„œ ๋ฐฉํ–ฅ์„ ์žก๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

๋น„๋ฐฅ์ด ๋ง์”€ํ•ด์ฃผ์‹  ๊ฒƒ์ฒ˜๋Ÿผ EmptyPiece์˜ searchRoute()๋Š” ์‹ค์ œ๋กœ ํ˜ธ์ถœ๋˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” โ€œ์˜๋ฏธ ์—†๋Š” ๊ตฌํ˜„โ€์— ๋Œ€ํ•œ ๊ฒฝ๊ณ„๋ฅผ ์–ด๋А ์ •๋„๊นŒ์ง€ ์œ ์ง€? ๋˜๋Š” ์–ด๋А ์ •๋„๊นŒ์ง€๋Š” ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์ธ์ง€ ๊ณ ๋ฏผ์ด ๋ฉ๋‹ˆ๋‹ค. ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ „์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ๊ตฌํ˜„์„ ๋‘๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋А ์ •๋„ ์œ ์—ฐํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋„ ๊ดœ์ฐฎ์„์ง€ ์—ฌ์ญค๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค์šด์บ์ŠคํŒ…์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์œ„ ํƒ€์ž…์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด instanceof๋ฅผ ํ™œ์šฉํ•œ ๊ตฌํ˜„์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

public boolean isAlly(Piece other) {
    return other instanceof ActivePiece activePiece && this.team == activePiece.team;
}

์ด ๋ถ€๋ถ„์€ other๊ฐ€ ์‹ค์ œ ๊ธฐ๋ฌผ์ธ์ง€(= ActivePiece์ธ์ง€)๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์˜๋„๋กœ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. instanceof๊ฐ€ ๋‹คํ˜•์„ฑ์„ ํ•ด์น  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์•Œ๊ณ  ์žˆ๋Š”๋ฐ, ํ˜„์žฌ์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ๋Š” ๊ทธ ์‚ฌ์šฉ์ด ํฌ๊ฒŒ ๋ฌธ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

๋น„๋ฐฅ์€ ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋ณด์‹œ๋Š”์ง€ ์˜๊ฒฌ์„ ๋“ค์–ด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์˜๋ฏธ์—†๋Š” ๊ตฌํ˜„ ์ฒ˜๋Ÿผ ๋А๊ปด์กŒ์„ ๋ฟ์ด์ง€ ์ €๋Š” ์ตœ์†Œํ•œ์˜ ๋ฐฉ์–ด๋กœ์ง์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋˜๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์™„์ „ ์˜๋ฏธ์—†๋Š” ๊ตฌํ˜„์ด๋ผ ํŒ๋‹จ๋œ๋‹ค๋ฉด ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๊ฒŒ ๊ฐ€์žฅ ์ข‹๊ฒ ์ฃ ? ์„ค๊ณ„์˜ ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜์š”.


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

์‚ฌ์‹ค ์„ค๊ณ„์˜ ๋ฐฉํ–ฅ์ด ์ด ์ƒํ™ฉ์„ ๋ฐœ์ƒ์‹œ์ผฐ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™์€๋ฐ์š”. EmptyPiece ๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ instanceof๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค ํƒ€์ž…์„ ํ™•์ธํ•˜์ง€ ์•Š์•„๋„ ๋์„๊ฒƒ ๊ฐ™๋„ค์š”.

์ €๋Š” ์„ธ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด๋Š”๋ฐ

  1. EmptyPiece ์ œ๊ฑฐ
  2. ๋ฉ”์„œ๋“œ๋ฅผ Piece๋กœ ์˜ฌ๋ฆฌ๊ณ  Team์— EmptyPiece ๋ฅผ ์œ„ํ•œ ๊ฐœ๋… ์ถ”๊ฐ€
  3. ๋ณ„๋„์˜ Team ๊ตฌ๋ถ„ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  isAlly์—์„œ ํ˜ธ์ถœํ•˜๊ธฐ

2๋ฒˆ ๋ฐฉ๋ฒ•์€ Team์— ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ์ถ”๊ฐ€ํ•˜๋Š”๊ฒŒ EmptyPiece์— ์˜ํ•ด Team์˜ ๊ตฌ์กฐ๊ฐ€ ํ”๋“ค๋ฆฌ๋Š”๊ฒƒ ๊ฐ™์•„ ๋‚ดํ‚ค์ง€ ์•Š๊ณ 

3๋ฒˆ ๋ฐฉ๋ฒ•์€ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ๊ผฌ๋ฆฌ ๋ฌผ๊ณ  ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€์„œ ๊ฐ€๋…์„ฑ์ด ๊ทธ๋ฆฌ ์ข‹์ง€ ์•Š์•„ ๋‚ดํ‚ค์ง€ ์•Š๋Š”๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ €๋ผ๋ฉด 1๋ฒˆ์˜ ๋ฐฉํ–ฅ์„ ํƒํ• ๊ฒƒ ๊ฐ™๋„ค์š”

๋ชจ์•„๋„ ๊ณ ๋ฏผํ•ด๋ณด๊ณ  ๋” ๋‚˜์€๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ๊ตฌํ˜„ํ•ด๋ณด์„ธ์š” ๊ผญ ๋”ฐ๋ผํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค๋งŒ instanceof๋Š” ์ œ๊ฑฐํ•ด๋ณด์‹œ์ฃ 

String display(PieceAppearance colorizer);

default boolean isCannon() {
return false;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

isCannon()์ด Piece ์ธํ„ฐํŽ˜์ด์Šค์— default ๋ฉ”์„œ๋“œ๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๋Š”๋ฐ์š”, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŠน์ • ๊ตฌํ˜„์ฒด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค ๋ ˆ๋ฒจ์—์„œ ์•Œ๊ณ  ์žˆ๋Š” ์…ˆ์ด ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ฌผ ์ข…๋ฅ˜๊ฐ€ ๋Š˜์–ด๋‚  ๋•Œ๋งˆ๋‹ค isXxx() ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ด๊ธฐ๋„ ํ•˜๊ณ ์š”.

๊ฒฝ๋กœ ๊ฒ€์ฆ ์ฑ…์ž„์„ ๊ธฐ๋ฌผ์—๊ฒŒ ์œ„์ž„ํ•˜๋ฉด, Board๊ฐ€ "์ด ๊ธฐ๋ฌผ์ด ํฌ์ธ์ง€" ๋ฌผ์–ด๋ณผ ํ•„์š” ์ž์ฒด๊ฐ€ ์—†์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ๊ณ ๋ฏผํ•ด๋ณด์‹œ๋ฉด ์ข‹๊ฒ ์–ด์š”.

๊ทธ๋ฆฌ๊ณ  default ๋ฉ”์„œ๋“œ๋Š” ์ƒˆ๋กœ์šด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ํ•˜์œ„ํ˜ธํ™˜์„ฑ์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•จ์ด๋‹ˆ ์ง€๊ธˆ์€ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•์œผ๋กœ ์ƒ๊ฐ๋˜์ง€๋Š” ์•Š๋Š”๊ฒƒ ๊ฐ™์•„์š”

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

์ด๋ฒˆ์— ๊ธฐ๋ฌผ๋กœ ๊ฒฝ๋กœ ๊ฒ€์ฆ ์ฑ…์ž„์„ ์˜ฎ๊ฒจ๋ดค์Šต๋‹ˆ๋‹ค. ๊ฒ€์ฆ ์ฑ…์ž„์ด ๋ฐ”๋€Œ๋‹ˆ ํ™•์‹คํžˆ isCannon() ์˜ ํ•„์š”์„ฑ์ด ์—†์–ด์ง„๊ฒŒ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ๊ตฌํ˜„ ๊ณผ์ •์—์„œ instanceof๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ์ด๊ฒŒ ์ ์ ˆํ•œ ์‚ฌ์šฉ๋ฒ• ์ด์˜€์„๊นŒ์š”?
์ œ๊ฐ€ ์ƒ๊ฐํ•œ instanceof์˜ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

โ€œ๋‹คํ˜•์„ฑ์œผ๋กœ ํ•ด์น  ์ˆ˜ ์žˆ๋Š” ํ–‰์œ„์ธ๊ฐ€?" ์•„๋‹ˆ๋ฉด "๋‹คํ˜•์„ฑ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์‹œ์Šคํ…œ์ , ๊ตฌ์กฐ์  ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•จ์ธ๊ฐ€?โ€

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

ํ˜น์‹œ ์ œ๊ฐ€ ์ž˜๋ชป ํŒ๋‹จํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ง€์ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

ํฌ ๊ทœ์น™๋•Œ๋ฌธ์— ์–ด๋””๋กœ ์˜ฎ๊ฒจ๋„ ๋น„์Šทํ•œ ๋А๋‚Œ์ด ๋‚˜๊ธดํ•˜๋„ค์š”

ํŠน์ • ํƒ€์ž…์„ ๋ฌผ์–ด๋ณด๋Š” ๋ฉ”์„œ๋“œ๋ณด๋‹จ ํŠน์ • ์ฑ…์ž„์„ ๋ฌผ์–ด๋ณด๋Š” ๋ฉ”์„œ๋“œ ๋„ค์ด๋ฐ์œผ๋กœ ๋ณ€๊ฒฝ๋งŒํ•˜์…”๋„ ๊ดœ์ฐฎ์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋„ค์ด๋ฐ์„ ํ†ตํ•ด ํƒ€์ž…์„ ๋ฌป๋Š”๊ฒƒ๊ณผ ์ฑ…์ž„์„ ๋ฌป๋Š”๊ฒƒ์€ ์ด๋ฆ„๋งŒ ๋‹ฌ๋ผ๋ณด์ผ์ง€์–ธ์ • ๊ทธ ๋„ค์ด๋ฐ์ด ๊ฐ–๊ณ ์žˆ๋Š” ์˜ํ–ฅ๋ ฅ์€ ๋‹ค๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”.

as-is: is{type}
to-be: can{action}

4, new YanggwimaFactory()
);

public static AbstractBoardFactory from(int input) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

factories.get(input)์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ์ˆซ์ž(์˜ˆ: 5, 0)๊ฐ€ ๋“ค์–ด์˜ค๋ฉด null์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ์š”, ์ด null์ด ๊ทธ๋Œ€๋กœ createFormation() ํ˜ธ์ถœ ์‹œ์ ์— NullPointerException์œผ๋กœ ํ„ฐ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ž…๋ ฅ์— ๋Œ€ํ•ด ์˜๋ฏธ ์žˆ๋Š” ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๊ธฐ์„œ ๋ฐฉ์–ดํ•ด์ฃผ๋Š” ๊ฒŒ ์ข‹๊ฒ ์–ด์š”.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

๋ฌธ์ œ ์ƒํ™ฉ์„ ์ •๋ฆฌํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” InputView์—์„œ ์ด๋ฏธ 1~4์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋„๋ฉ”์ธ์—์„œ ์ด๋ฅผ ๋‹ค์‹œ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด ์ค‘๋ณต์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋งŒ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์ด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฐ’์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ 
๋„๋ฉ”์ธ์ด ์ž…๋ ฅ ํ˜•์‹(์˜ˆ: 1,2,3,4)์— ์˜์กดํ•˜๊ฒŒ ๋˜์–ด, ์ž…๋ ฅ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ฐ”๋€Œ๋ฉด ๋„๋ฉ”์ธ๊นŒ์ง€ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ตฌ์กฐ๋ผ๋Š” ์ 

์ด ๋ถ€๋ถ„์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

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

์—ฌ๊ธฐ์„œ ๋ช‡ ๊ฐ€์ง€ ๊ณ ๋ฏผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ๋ณ„๋„์˜ ๋ณ€ํ™˜(์œ ํ‹ธ) ํด๋ž˜์Šค๋ฅผ ๋‘๋Š” ๋ฐฉํ–ฅ์ด ๊ดœ์ฐฎ์€์ง€
์ด ํด๋ž˜์Šค์˜ ์œ„์น˜๋ฅผ ์–ด๋””์— ๋‘๋Š” ๊ฒŒ ์ ์ ˆํ• ์ง€ (์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ณ€ํ™˜ ์ฑ…์ž„์„ ๊ฐ€์ง„๋‹ค๊ณ  ๋ณด๊ณ  controller์— ๋‘˜์ง€, ์ž…๋ ฅ๊ณผ ๊ฐ€๊น๋‹ค๊ณ  ๋ณด๊ณ  view์— ๋‘˜์ง€)
๊ธฐ์กด์— InputView์—์„œ ์ˆ˜ํ–‰ํ•˜๋˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š”์ง€

์ด ๋ฐฉํ–ฅ์ด ๊ดœ์ฐฎ์€ ์ ‘๊ทผ์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ๋” ๋‚˜์€ ์„ค๊ณ„ ๋ฐฉํ–ฅ์ด ์žˆ๋‹ค๋ฉด ๋น„๋ฐฅ์˜ ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์•„ view์—์„œ ๋“ค์–ด์˜จ๊ฑธ ๋„๋ฉ”์ธํƒ€์ž…์œผ๋กœ ์ปจ๋ฒ„ํŒ…ํ•˜๋Š” ์—ญํ• ์ด๊ตฐ์š”

์ข‹์€๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ๐Ÿ‘

์‹ค์ œ๋กœ ์ €ํฌํŒ€์—์„œ๋„ ํŒ€์—์„œ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„๋•Œ ์ด๋Ÿฐ ๊ณ„์ธต์„ ๋‘์–ด์„œ ๋„๋ฉ”์ธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

view์— ์˜์กด์ ์ด๋˜ ๊ฐ’, ํŠน์ • ํด๋ผ์ด์–ธํŠธ์— ์˜์กด์ ์ธ ๋ถ€๋ถ„์ด ๋„๋ฉ”์ธ์„ ์นจ๋ฒ”ํ•˜์ง€ ์•Š๊ฒŒ ๋˜์–ด ๋„๋ฉ”์ธ์ด ๋” ๊ฒฌ๊ณ ํ•ด์ง€๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๋Š”๋ฐ ์ž˜ ์ ์šฉํ•ด์ฃผ์‹ ๊ฒƒ ๊ฐ™๋„ค์š”.

์ด๋Ÿฐ ๋ถ€๋ถ„์„ anti corruption layer ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„๋‚˜์‹œ๋ฉด ํ•œ๋ฒˆ ์ฐพ์•„์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


public class Elephant extends ActivePiece {

private final List<Integer> dx = List.of(2, 3, -2, -3, -3, -2, 2, 3);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

dx, dy๊ฐ€ ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์–ด์„œ Elephant ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š”๋ฐ์š”, ์ด ๊ฐ’๋“ค์€ ๋ชจ๋“  ์ƒ(่ฑก) ์ธ์Šคํ„ด์Šค์—์„œ ๋™์ผํ•˜๋‹ˆ๊นŒ static final๋กœ ์„ ์–ธํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์—์„œ ์–ธ๊ธ‰ํ•œ ๋ถ€๋ถ„๊ณผ ๊ฐ™์€๋ฐ์š”, Horse, General, Guard, Soldier์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ๋„ ์ถ•์•ฝํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š” ์•„๋งˆ delta๊ฒ ์ฃ ?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

์•„ ์ •๋ง ๊ทธ๋ ‡๋„ค์š”. ๋ฏธ์ฒ˜ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋ถ€๋ถ„์ธ๋ฐ ์งš์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

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

๊ทธ๋ฆฌ๊ณ  ๋„ค์ด๋ฐ๋„ dx, dy๋ณด๋‹ค๋Š” ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”๊ฐ€์˜ offset์ด ๋” ์˜๋„๋ฅผ ์ž˜ ๋“œ๋Ÿฌ๋‚ด๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

}

@Test
void ๊ฒฝ๊ณ„๊ฐ’_์ตœ๋Œ€_๋ฒ”์œ„์˜_์œ„์น˜๋ฅผ_์ƒ์„ฑํ•œ๋‹ค() {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์˜ˆ์™ธ ํ…Œ์ŠคํŠธ์—์„œ isInstanceOf(IllegalArgumentException.class)๋งŒ ๊ฒ€์ฆํ•˜๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š”๋ฐ์š”, Row์™€ Column ๋ชจ๋‘ IllegalArgumentException์„ ๋˜์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ–‰์ด ์ž˜๋ชป๋œ ๊ฑด์ง€ ์—ด์ด ์ž˜๋ชป๋œ ๊ฑด์ง€ ์ด ํ…Œ์ŠคํŠธ๋งŒ์œผ๋กœ๋Š” ๊ตฌ๋ถ„์ด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. hasMessage() ๋˜๋Š” hasMessageContaining()์œผ๋กœ ์˜๋„ํ•œ ์˜ˆ์™ธ ์ง€์ ์„ ํŠน์ •ํ•ด์ฃผ์‹œ๋ฉด ๋” ๊ฒฌ๊ณ ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋  ๊ฒƒ ๊ฐ™์•„์š”.

Copy link
Copy Markdown
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 +38
@Override
public List<Position> searchRoute(Position source, Position target) {
return List.of();
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

์—ฌ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์€ ์งˆ๋ฌธ์„ ์ฃผ์‹ ๊ฒƒ ๊ฐ™๋„ค์š”. ๊ทธ๋Ÿฐ๋ฐ searchRoute๋Š” ์›€์ง์ž„์˜ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ๊ธฐ๋ฌผ๋“ค์ด src์—์„œ dest๋กœ ๊ฐˆ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ผ๋•Œ์—๋„ ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‘๋‹ตํ•ด์•ผํ•˜์ง€ ์•Š๋‚˜์š”? ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„๊ณผ ์‹ค์ œ ๋™์ž‘์ด ์ €๋Š” ์•ฝ๊ฐ„ ๊ฑฐ๋ฆฌ๊ฐ์ด ์žˆ๋Š”๊ฒƒ ๊ฐ™์•„๋ณด์ด๋„ค์š”.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

๊ทธ๋ฆฌ๊ณ  src, dest ์ถ•์•ฝํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

๋งž๋Š” ๋ง์”€์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. searchRoute()๋Š” ํ•ญ์ƒ canMove()๋ฅผ ๋จผ์ € ํ†ต๊ณผํ•œ ์œ ํšจํ•œ ๋Œ€์ƒ์— ๋Œ€ํ•ด์„œ๋งŒ ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ˆœํžˆ โ€œ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹คโ€๊ธฐ๋ณด๋‹ค๋Š” โ€œ์œ ํšจํ•œ ์ž…๋ ฅ์— ๋Œ€ํ•ด ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹คโ€๋Š” ์˜๋ฏธ๊ฐ€ ๋” ๊ฐ€๊น๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ calculateRoute()๋กœ ๋ณ€๊ฒฝํ•ด๋ณด์•˜๋Š”๋ฐ, ์ด๋Ÿฐ ๋ฐฉํ–ฅ์˜ ๋„ค์ด๋ฐ์ด ์ ์ ˆํ•œ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ํ˜น์‹œ ์ œ๊ฐ€ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ง€์ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์„œ ์•Œ๋ ค์ฃผ๋Š” ๋А๋‚Œ์ด๋ผ ์ง€๊ธˆ๋„ ๊ทธ๋ ‡๊ฒŒ ์–ด์ƒ‰ํ•˜๋‹ค๋Š” ๋А๋‚Œ์€ ์—†๋Š”๋ฐ์š”. ๊ตณ์ด ์ €๋ผ๋ฉด ๋ญ๋ผ๊ณ  ์ง€์—ˆ์„๊นŒ ํ•˜๋ฉด findRoute ์ •๋„๊ฐ€ ๋– ์˜ค๋ฅด๋„ค์š” ๋ณ„๋ฐ˜ ์ฐจ์ด์—†์ฃ ? ใ…‹ใ…‹..

Comment on lines +14 to +19
public Turn next() {
if (current == Team.CHO) {
return new Turn(Team.HAN);
}
return new Turn(Team.CHO);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์–ด๋””๋‹ค ๋‹ฌ์ง€ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ์—ฌ๊ธฐ์— ๋‹ต๋ณ€๋“œ๋ฆด๊ฒŒ์š”. ์•„๋งˆ ๋ฌด๋ถ„๋ณ„ํ•œ getter๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ์ผ๊ฒƒ ๊ฐ™์€๋ฐ์š”. ๊ฐ€๋ น ๋””๋ฏธํ„ฐ ๋ฒ•์น™์„ ์–ด๊ธฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ๋„ ์žˆ์„๊ฒƒ ๊ฐ™๋„ค์š”.

์–ผํ• ๋ณด์•˜์„๋•Œ ๋Œ€๋ถ€๋ถ„ ์ž˜ ์ง€์ผœ์ฃผ์‹ ๊ฒƒ ๊ฐ™๊ธดํ•œ๋ฐ ์ง€๊ธˆ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•จ์œผ๋กœ ๋ณด์—ฌ์š”. ์งˆ๋ฌธ์œผ๋กœ ๋ฏธ๋ฃจ์–ด ๋ณด์•˜์„ ๋•Œ ์บก์Аํ™”๋ฅผ ์ง€ํ‚ค๊ธฐ ์œ„ํ•จ์ด๋ผ๋Š”๊ฒƒ์€ ์ด๋ฏธ ์ถฉ๋ถ„ํžˆ ์ธ์ง€ํ•˜๊ณ  ๊ณ„์‹ ๊ฒƒ ๊ฐ™๋„ค์š”. ์ง€๊ธˆ๊ณผ ๊ฐ™์ด Turn์—์„œ Team์— ๋Œ€ํ•œ ๊ตฌํ˜„ ์ƒ์„ธ๊ฐ€ ๋…ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ง‰์œผ๋ผ๋Š”๊ฑฐ์ง€ ๋ฌด์กฐ๊ฑด getter๋Š” ์•ˆ๋ผ ๋Š” ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ด์š”.

์‹ค๋ฌด์—์„œ๋„ getter๋ฅผ ์จ์–‘ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋ถ„๋ช… ์กด์žฌํ•˜๊ตฌ์š”. ex. ์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™”๋ฅผ ์œ„ํ•ด์„œ ๋“ฑ..

๊ฐ€๋ น ์ง€๊ธˆ ๋ฏธ์…˜์˜ ๊ฒฝ์šฐ view๋ฅผ ์œ„ํ•ด์„œ๋ผ๋ฉด getter๋ฉ”์„œ๋“œ๊ฐ€ ๋‚˜์˜ฌ์ˆ˜ ๋ฐ–์— ์—†์„๊ฒƒ ๊ฐ™์•„์š”

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

์•„ํ•˜ ๋‹ต๋ณ€ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!
view๋ฅผ ์œ„ํ•ด์„œ ์“ฐ๋Š” ๋ถ€๋ถ„์€ ๋ถˆ๊ฐ€ํ”ผํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๊ตฐ์š”.

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

๊ตณ์ด ์ง€๊ธˆ ๋‹จ๊ณ„์—์„œ๋Š” dto๋ผ๋Š” ๊ฐœ๋…์„ ์“ฐ์‹ค ํ•„์š”๋Š” ์—†์„๊ฒƒ ๊ฐ™์•„์š”.

์ง€๊ธˆ์€ ๋„๋ฉ”์ธ์—์„œ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ’€์–ด์„œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ• ์ง€์— ๋Œ€ํ•ด ์ง‘์ค‘ํ•˜๋Š”๊ฒŒ ๋” ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ณดํ†ต dto๋ฅผ ๋งŒ๋“ค์–ด๋„ ๋„๋ฉ”์ธ์ด dto๋ฅผ ์˜์กดํ•˜์ง€ ์•Š๊ณ  dto๊ฐ€ ๋„๋ฉ”์ธ์„ ์˜์กดํ•˜๋„๋ก ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

๊ฐ’ ์ „๋‹ฌ์„ ์œ„ํ•œ getter๋Š” ๋Œ€๋ถ€๋ถ„ ์ƒ๊ฒจ๋‚˜๊ธฐ ๋งˆ๋ จ์ด๊ธดํ•ด์š”. ๊ฐ’ ๊ฐ์ฒด๋กœ ๋ชจ๋“  ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด์š”

Comment on lines +22 to +26
if (piece.isCannon()) {
validateCannonRoute(route, dest);
} else {
validateIntermediateRoute(route);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

์ด ๋ถ€๋ถ„์ด๊ฒ ์ฃ ? ์ €๋Š” ์ด๋ฒˆ๋‹จ๊ณ„์—์„œ ๊ณ ์น˜๊ณ  ๋„˜์–ด๊ฐ€๋ฉด ์ข‹์„๊ฒƒ ๊ฐ™์€๋ฐ์š”ใ…Žใ…Ž.. ์ง€๊ธˆ move์—์„œ validateํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ๋“ค์ด ๊ฐ piece ๊ตฌํ˜„์ฒด ๋‚ด๋ถ€๋กœ ๊ฐ€๋ ค์ง€๋„๋ก ํ•ด๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”.

์•„์‹œ๊ฒ ์ง€๋งŒ move ๋ฉ”์„œ๋“œ๊ฐ€ ํฌ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ if-else๋กœ ๋ถ„๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํŠน์ˆ˜ ์ด๋™ ๊ทœ์น™์„ ๊ฐ€์ง„ ๊ธฐ๋ฌผ์ด ์ถ”๊ฐ€๋˜๋ฉด ์ด ๋ถ„๊ธฐ๊ฐ€ ๊ณ„์† ๋Š˜์–ด๋‚˜๊ฒ ์ฃ ?

"๊ฒฝ๋กœ์— ์žˆ๋Š” ๊ธฐ๋ฌผ๋“ค์„ ๊ฒ€์ฆํ•˜๋Š” ์ฑ…์ž„"์„ ๊ฐ ๊ธฐ๋ฌผ์ด ์Šค์Šค๋กœ ๊ฐ€์ง€๊ฒŒ ํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”? ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ๋ฌผ์—๊ฒŒ ๊ฒฝ๋กœ์ƒ์˜ ๊ธฐ๋ฌผ ๋ชฉ๋ก์„ ์ „๋‹ฌํ•˜๊ณ , ์ž๊ธฐ ๊ทœ์น™์— ๋งž๋Š”์ง€ ์Šค์Šค๋กœ ํŒ๋‹จํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ์‹์ด์š”. Board๋Š” "๊ฒฝ๋กœ์— ๋ญ๊ฐ€ ์žˆ๋Š”์ง€ ์กฐํšŒ"๋งŒ ํ•˜๊ณ , "๊ทธ๊ฒŒ ์œ ํšจํ•œ์ง€ ํŒ๋‹จ"์€ ๊ธฐ๋ฌผ์—๊ฒŒ ์œ„์ž„ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์‹œ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

ํ•ด๋‹น ๋ถ€๋ถ„ ๊ธฐ๋ฌผ์—๊ฒŒ ๋ถ€์—ฌํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฆฌํŒฉํ† ๋ง ์ž‘์—…์ด ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ๋‹ค์†Œ ์˜ค๋ž˜ ๊ฑธ๋ ธ์ง€๋งŒ.. ๋น„๋ฐฅ์ด ์กฐ์–ธํ•ด์ฃผ์‹  ๋ถ€๋ถ„์ด ์ •๋ง ๋งŽ์€ ํžŒํŠธ๊ฐ€ ๋˜์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค..!!

import view.InputView;
import view.OutputView;

public class JanggiController {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์งˆ๋ฌธ์ธ๋ฐ์š”. controller๋Š” ์–ด๋””์„œ ์ฐฉ์•ˆํ•˜์‹  ๋„ค์ด๋ฐ์ผ๊นŒ์š”? ์™œ controller์ธ๊ฐ€์š”?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

์ด๋ฒˆ์— ๋น„๋ฐฅ์ด ์งˆ๋ฌธํ•ด์ฃผ์‹  ๋•๋ถ„์— ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ž๋ฃŒ๋ฅผ ์ฐพ์•„๋ณด๋Š” ๊ณผ์ •์—์„œ ๊ธ€๋งˆ๋‹ค ์„ค๋ช…์ด ์กฐ๊ธˆ์”ฉ ๋‹ฌ๋ผ์„œ ๊ธฐ์ค€์„ ์žก๋Š” ๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์›€์„ ๋А๊ผˆ๊ณ , ๊ทธ๋ž˜์„œ ๋‚˜๋ฆ„๋Œ€๋กœ ๊ธฐ์ค€์„ ์„ธ์›Œ ์ •๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

์šฐ์„  ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์ ์ด์ž ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ์—ญํ• ์ด๋ผ๊ณ  ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€(View, ํด๋ผ์ด์–ธํŠธ)์™€ ๋‚ด๋ถ€(Model, Service) ์‚ฌ์ด์—์„œ ์ค‘๊ฐ„ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•˜๋ฉด์„œ, ์ž…๋ ฅ์„ ๋„๋ฉ”์ธ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๋ฐ˜๋Œ€๋กœ ๊ฒฐ๊ณผ๋ฅผ ์™ธ๋ถ€์— ๋งž๊ฒŒ ๋ณ€ํ™˜ํ•˜๋Š” โ€œ๋ฒˆ์—ญ๊ฐ€โ€ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž˜๋ชป๋œ ์š”์ฒญ์„ ์ดˆ๊ธฐ์— ๊ฑธ๋Ÿฌ๋‚ด๊ณ  ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” โ€œ๋ฌธ์ง€๊ธฐโ€ ์—ญํ• ๋„ ํ•จ๊ป˜ ๊ฐ€์ง„๋‹ค๊ณ  ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

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

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

์ด๋ ‡๊ฒŒ ๋‚˜๋ฆ„๋Œ€๋กœ ๊ธฐ์ค€์„ ์„ธ์›Œ ์ •๋ฆฌํ•ด๋ณด์•˜๋Š”๋ฐ, ํ˜น์‹œ ์ œ๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๊ฑฐ๋‚˜ ์ž˜๋ชป ์ดํ•ดํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ๋น„๋ฐฅ์˜ ์˜๊ฒฌ์„ ๋“ค์–ด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์•„ ์ €๋Š” ์ง€๊ธˆ controller์— ๋Œ€ํ•ด ๊ต์œก์„ ๋ฐ›์€๊ฑด๊ฐ€ ํ•ด์„œ ์—ฌ์ญค๋ณธ๊ฑฐ์˜€๋Š”๋ฐ์š”

์ง€๊ธˆ์€ ์ด ๋ถ€๋ถ„๋ณด๋‹ค ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์ง‘์ค‘ํ•˜์‹œ๋Š”๊ฒŒ ๋” ๋‚ซ์ง€ ์•Š๋‚˜ ์‹ถ์Šต๋‹ˆ๋‹ค.

์ฐพ์•„๋ณด์‹  ๋‚ด์šฉ๋“ค์€ ์ž˜ ์ •๋ฆฌํ•ด์„œ ๊ณ„์†ํ•ด์„œ ๋ฐœ์ „์‹œํ‚ค๋ฉด ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๐Ÿ‘

Comment on lines +12 to +14
if (value <= 0 || value > 10) {
throw new IllegalArgumentException("ํ–‰์˜ ์œ„์น˜๋Š” 1-10 ์‚ฌ์ด์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์ƒ์ˆ˜๋กœ ๋นผ๋„ ๋  ๊ฒƒ ๊ฐ™๋„ค์š”.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

์ถฉ๋ถ„ํžˆ ์ƒ์ˆ˜๋กœ ๋‘์–ด๋„ ๊ดœ์ฐฎ์€ ๊ฐ’์ด์˜€๋˜๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ๋ฐ”๋กœ ์ˆ˜์ •ํ•ด๋‘๊ฒ ์Šต๋‹ˆ๋‹ค


import domain.position.Position;

public class EmptyPiece implements Piece {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ๊นŒ์š”?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

์ด๋ฒˆ์— ์‹ฑ๊ธ€ํ†ค์„ ๊ณต๋ถ€ํ•ด๋ณด๋ฉด์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์š”์ฒญํ•˜๋ฉด ์—ฌ๋Ÿฌ๊ฐœ์˜ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๊ฐ€ ์ƒ๊ธธ ์—ฌ์ง€๊ฐ€ ์žˆ์–ด์„œ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ์‚ฌ๋žŒ๋“ค์ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•ด์™”๋Š”์ง€ ๊ทธ ๊ณผ์ •์ด ์ธ์ƒ ๊นŠ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ EmptyPiece์—์„œ๋Š” Bill-pugh ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•ด๋ดค๋Š”๋ฐ์š”, JVM ๋ ˆ๋ฒจ์—์„œ ์“ฐ๋ ˆ๋“œ ์•ˆ์ •์„ฑ์„ ์ง€์›ํ•ด์„œ ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ ๋‘˜ ๋‹ค ์ฑ™๊ธด ๋ฐฉ์‹์ด๋ผ๊ณ  ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•œ๋‹ค๋ผ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด ์ƒ๊ธธ ๋•Œ ๊ผญ ์‹ ๊ฒฝ์จ์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด ์•„๋‹๊นŒ? ์ƒ๊ฐํ•˜์—ฌ ํ•ด๋‹น ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•ด๋ดค๋Š”๋ฐ, ์ œ๊ฐ€ ์ž˜ ์ ์šฉํ•œ ๋ถ€๋ถ„์ธ์ง€ ๊ถ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค!!

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

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

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

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

๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ด ์ •๋„๋Š” ๊ผญ ์งš๊ณ  ๋„˜์–ด๊ฐ€๋ฉด ์ข‹๊ฒ ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋Š” ๋ถ€๋ถ„์ด๋‚˜, ์ง€๊ธˆ ๋‹จ๊ณ„์—์„œ ์ œ๊ฐ€ ๋ณด์™„ํ•˜๋ฉด ์ข‹์„ ์ง€์ ์ด ์žˆ๋‹ค๋ฉด ํ•จ๊ป˜ ๋ง์”€ํ•ด์ฃผ์‹œ๋ฉด ์ •๋ง ํฐ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚จ๊ฒจ์ฃผ์‹  ๋ฆฌ๋ทฐ ๋•๋ถ„์— ๋งŽ์ด ์„ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

ํŠนํžˆ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์š”์ฒญํ•˜๋ฉด ์—ฌ๋Ÿฌ๊ฐœ์˜ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๊ฐ€ ์ƒ๊ธธ ์—ฌ์ง€๊ฐ€ ์žˆ์–ด์„œ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ์‚ฌ๋žŒ๋“ค์ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•ด์™”๋Š”์ง€ ๊ทธ ๊ณผ์ •์ด ์ธ์ƒ ๊นŠ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ EmptyPiece์—์„œ๋Š” Bill-pugh ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•ด๋ดค๋Š”๋ฐ์š”, JVM ๋ ˆ๋ฒจ์—์„œ ์“ฐ๋ ˆ๋“œ ์•ˆ์ •์„ฑ์„ ์ง€์›ํ•ด์„œ ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ ๋‘˜ ๋‹ค ์ฑ™๊ธด ๋ฐฉ์‹์ด๋ผ๊ณ  ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•œ๋‹ค๋ผ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด ์ƒ๊ธธ ๋•Œ ๊ผญ ์‹ ๊ฒฝ์จ์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด ์•„๋‹๊นŒ? ์ƒ๊ฐํ•˜์—ฌ ํ•ด๋‹น ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•ด๋ดค๋Š”๋ฐ, ์ œ๊ฐ€ ์ž˜ ์ ์šฉํ•œ ๋ถ€๋ถ„์ธ์ง€ ๊ถ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค!!

์š”๊ฑฐ ๋Ÿฐํƒ€์ž„์— ํ˜ธ์ถœ๋ ๋•Œ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ฒ ๋‹ค ์ธ๊ฒƒ ๊ฐ™๋„ค์š”. ์ €๋Š” ์ด์ •๋„๋ผ๋ฉด ๊ทธ๋ƒฅ static ํ•„๋“œ๋ฅผ EmptyPiece์— ๋‘์–ด๋„ ๊ดœ์ฐฎ์•„๋ณด์—ฌ์š”. ์ง€๊ธˆ ๋ฐฉ์‹์€ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๋น„์šฉ์ด ๋น„์‹ผ๋ฐ ์•ˆ์“ฐ์ผ์ˆ˜๋„ ์žˆ์œผ๋ฉด ์ข€ ๋” ์˜๋ฏธ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณด์ด๋„ค์š”

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

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

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

์ฑ…์€ ์ด๊ฒƒ์ €๊ฒƒ ๋งŽ์„๊ฒƒ ๊ฐ™๊ธดํ•œ๋ฐ.. ํ…Œ์ŠคํŠธ ๊ด€๋ จํ•ด์„œ๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ผ๋Š” ์ฑ…์€ ๊ผญ ์ฝ์–ด๋ณด์‹œ๋ฉด ์ข‹์„๊ฒƒ ๊ฐ™์•„์š”. ์ €๋„ ๋‘๋ฒˆ? ์„ธ๋ฒˆ ์ฝ์€๊ฒƒ ๊ฐ™์€๋ฐ ์ฝ์„๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๋ณด์ด๋Š” ๋ฉด์ด ์ƒ๊ธฐ๊ธฐ๋„ ํ–ˆ๋˜๊ฒƒ ๊ฐ™์•„์„œ ์ข‹์€์ฑ… ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ช…์„œ ํด๋ฆฐ์•„ํ‚คํ…์ฒ˜, ํด๋ฆฐ์ฝ”๋“œ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ด๋ฒˆ๋ฏธ์…˜๊ณผ ์•ž์œผ๋กœ์˜ ๋ฏธ์…˜์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๊ฐœ์ธ์ ์œผ๋กœ ํ•ญ์ƒ ์—ผ๋‘ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์…จ์œผ๋ฉด ํ•˜๋Š” ๋ถ€๋ถ„์€
๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ์— ์šฉ์ดํ•œ ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. OCP ์—์š”.

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

Copy link
Copy Markdown

@pci2676 pci2676 left a comment

Choose a reason for hiding this comment

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

์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€๊ณผ ์ถ”๊ฐ€ ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ฒจ๋‘์—ˆ์–ด์š”.

๋ฆฌ๋ทฐ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ์ฝ”๋“œ๋ฅผ ์ „๋ฐ˜์ ์œผ๋กœ ๊ฒ€ํ† ํ•˜์…”์„œ ๋น„์Šทํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ๊ฐ™์ด ๊ฐœ์„ ํ•ด์ฃผ์„ธ์š”.


@Override
public boolean isAlly(Piece other) {
return other instanceof ActivePiece activePiece && this.team == activePiece.team;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

๋‹ค์‹œ ๊ฐœ์„ ํ•ด๋ณด์‹œ์ฃ ~

int count = 0;
for (Piece piece : piecesOnRoute) {
if (piece instanceof Cannon) {
throw new IllegalArgumentException("ํฌ๋Š” ํฌ๋ฅผ ๋„˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.");
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์—ฌ๊ธฐ๋„์š”~

}

public void move(Position source, Position destination) {
board.move(source, destination);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

board.move()๋ฅผ ํ˜ธ์ถœํ•œ ๋’ค ๋ฐ”๋กœ turn = turn.next()๋ฅผ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”, ํ˜„์žฌ ํ„ด์˜ ๊ธฐ๋ฌผ์ธ์ง€ ๊ฒ€์ฆํ•˜๋Š” ๋กœ์ง์ด ๋ณด์ด์ง€ ์•Š์•„์š”. ์ƒ๋Œ€๋ฐฉ ๊ธฐ๋ฌผ์„ ๋‚ด ํ„ด์— ์›€์ง์ผ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ธ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด ๋ถ€๋ถ„์€ ์–ด๋””์„œ ๊ฒ€์ฆ๋˜๊ณ  ์žˆ๋‚˜์š”?

private void validate(int value) {
if (value <= 0 || value > 10) {
throw new IllegalArgumentException("ํ–‰์˜ ์œ„์น˜๋Š” 1-10 ์‚ฌ์ด์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์—ฌ๊ธฐ ์ƒ์ˆ˜ ์„ ์–ธํ•œ๊ฑฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ์žˆ๋Š”๊ฒƒ ๊ฐ™์•„์š”?

import java.util.List;

public class Soldier extends ActivePiece {
private static final List<Integer> rowOffsets = List.of(-1, 1);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์ƒ์ˆ˜ ๋„ค์ด๋ฐ ๋ฒ•์น™์ด ์žˆ์ง€ ์•Š๋‚˜์š”?


isValidSideMove ๋ฅผ ๋ณด์•˜๋Š”๋ฐ์š”

ํ•„๋“œ ์ด๋ฆ„๊ณผ ๋น„๊ต ๋Œ€์ƒ์ด ๊ต์ฐจ๋˜์–ด ์žˆ์–ด์„œ ์ฝ๋Š” ์‚ฌ๋žŒ ์ž…์žฅ์—์„œ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์š”

์กฐ๊ธˆ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆœ ์—†์„๊นŒ์š”?

๊ทธ๋ฆฌ๊ณ  depth ์กฐ๊ฑด์„ ์œ„๋ฐฐํ–ˆ๋„ค์š”

public class InputView {
private static final int MOVE_INPUT_COUNT = 4;
private final Scanner scanner = new Scanner(System.in);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

initialFormation์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด Integer(๋ž˜ํผ)๋กœ ๋˜์–ด ์žˆ๋Š”๋ฐ์š”, null์„ ๋ฐ˜ํ™˜ํ•  ์˜๋„๊ฐ€ ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด int(์›์‹œ ํƒ€์ž…)๋กœ ์ถฉ๋ถ„ํ•ด ๋ณด์—ฌ์š”.

GENERAL(0.0, List.of(5), General::new),
PHO(7.0, List.of(2, 8), Cannon::new),
BYEONG(2.0, List.of(1, 3, 5, 7, 9), Soldier::new),
EMPTY(0.0, List.of(), team -> EmptyPiece.getInstance()),;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

EMPTY ํƒ€์ž…์ด PieceType enum์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”๋ฐ์š”, "๋นˆ ์นธ"์ด ๊ธฐ๋ฌผ์˜ ํ•œ ์ข…๋ฅ˜์ธ์ง€ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์กฐ๊ธˆ ์–ด์ƒ‰ํ•œ ๋ถ€๋ถ„์ด ์žˆ์–ด๋ณด์ด๋„ค์š”. PieceType์ด ๊ธฐ๋ฌผ์˜ ์ ์ˆ˜(score)์™€ ์ดˆ๊ธฐ ๋ฐฐ์น˜ ์—ด(initialColumns)์„ ๊ฐ–๊ณ  ์žˆ๋Š”๋ฐ, EMPTY๋Š” ์ด ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ์˜๋ฏธ๊ฐ€ ์—†๊ฑฐ๋“ ์š”. EmptyPiece์˜ toString()์„ ์œ„ํ•ด์„œ๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด enum ๊ฐ’์ด ์—ฌ๊ธฐ ์žˆ๋Š” ๊ฒŒ ์ ์ ˆํ•œ์ง€ ํ•œ๋ฒˆ ๊ณ ๋ฏผํ•ด๋ณด์‹œ๋ฉด ์ข‹๊ฒ ์–ด์š”.

Comment on lines +30 to +45
public List<Position> calculateRoute(Position source, Position target) {
if (source.columnDiff(target) == -3) {
Position mid = source.addPosition(0, 1);
return List.of(mid, mid.middlePosition(target));
}
if (source.columnDiff(target) == 3) {
Position mid = source.addPosition(0, -1);
return List.of(mid, mid.middlePosition(target));
}
if (source.rowDiff(target) == -3) {
Position mid = source.addPosition(1, 0);
return List.of(mid, mid.middlePosition(target));
}
Position mid = source.addPosition(-1, 0);
return List.of(mid, mid.middlePosition(target));
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์ ˆ์ฐจ์ ์œผ๋กœ ๋ชจ๋“  ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด ๋‚˜์—ด์ด ๋œ๊ฒƒ ๊ฐ™์€๋ฐ ์ถ”์ƒํ™”ํ• ์ˆ˜ ์—†์„๊นŒ์š”?

์ด ๋ถ€๋ถ„์€ ์‰ฝ์ง€ ์•Š์„์ˆ˜๋Š” ์žˆ๋Š”๋ฐ์š” ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค ์‹ถ์œผ๋ฉด ์•ˆํ•˜์…”๋„ ๋˜์–ด์š”.

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.

3 participants