Skip to content

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

Open
yeo-li wants to merge 34 commits intowoowacourse:yeo-lifrom
yeo-li:step1

Conversation

@yeo-li
Copy link
Copy Markdown

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

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

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

์‹คํ–‰ ์ „ ์œ ์˜ ์‚ฌํ•ญ

1. ์ฝ˜์†”์˜ ํฐํŠธ๋ฅผ D2Coding์œผ๋กœ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.

D2Coding ํฐํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ์žฅ๊ธฐํŒ๊ณผ ์žฅ๊ธฐํŒ ์ขŒํ‘œ์˜ ์œ„์น˜๊ฐ€ ์–ด๊ธ‹๋‚˜๊ฒŒ ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์žฅ๊ธฐํŒ์˜ ์ƒ๋‹จ์ด ํ•œ, ํ•˜๋‹จ์ด ์ดˆ์—์š”.

์ž…๋ ฅ ์ขŒํ‘œ ๊ธฐ์ค€์€ ์ถœ๋ ฅ๋œ ๋ณด๋“œ ๊ธฐ์ค€ ๊ทธ๋Œ€๋กœ์ด๋ฉฐ, y=1์ด ํ•œ, y=10์ด ์ดˆ์ž…๋‹ˆ๋‹ค.

3. ์ขŒํ‘œ ์ž…๋ ฅ์€ ๋ฐ˜๋“œ์‹œ ์ˆซ์ž๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.

ํ˜„์žฌ ์ขŒํ‘œ ์ž…๋ ฅ์€ Scanner.nextInt()๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด, ๋ฌธ์ž ์ž…๋ ฅ ์‹œ InputMismatchException์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

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

1. ์ด๋™ ๊ทœ์น™ ๊ฒ€์ฆ ์ฑ…์ž„ ๋ถ„๋ฆฌ ๊ตฌ์กฐ์˜ ์ ์ ˆ์„ฑ

Board.movePiece์—์„œ ํ„ด/์†Œ์œ ๊ถŒ/๊ฒฝ๋กœ/๋ชฉ์ ์ง€ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์‹ค์ œ ์ด๋™ ๊ฐ€๋Šฅ ๊ฒฝ๋กœ ๊ณ„์‚ฐ์€ MovementStrategy(PathMovement, LinearMovement)๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ์ฑ…์ž„ ๋ถ„๋ฆฌ๊ฐ€ ์œ ์ง€๋ณด์ˆ˜/ํ™•์žฅ ์ธก๋ฉด์—์„œ ์ ์ ˆํ•œ์ง€ ํ”ผ๋“œ๋ฐฑ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:)

2. ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€ ์ผ๊ด€์„ฑ๊ณผ ์ž…๋ ฅ ์•ˆ์ •์„ฑ

๋„๋ฉ”์ธ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ถœ๋ ฅ์„ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๋ฉ”์‹œ์ง€์˜ ์˜๋ฏธ/์ •ํ™•์„ฑ์ด ์ถฉ๋ถ„ํ•œ์ง€์™€
์ž…๋ ฅ ํŒŒ์‹ฑ(nextInt) ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ View/Controller/Domain ์–ด๋””์—์„œ ๋‹ด๋‹นํ•˜๋Š” ๊ฒŒ ์ข‹์€์ง€ ์˜๊ฒฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

3. ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€์˜ ์ ์ ˆ์„ฑ

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

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

์•ˆ๋…•ํ•˜์„ธ์š” ๋กœํ‚ค!
์ด๋ฒˆ ๋ฆฌ๋ทฐ์–ด๋กœ ์ฐธ์—ฌํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)
ํŽธํ•˜์‹ค๋•Œ ๋ฆฌ๋ทฐ ํ•ด์ฃผ์‹œ๋ฉด ์ €๋„ ๋น ๋ฅด๊ฒŒ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!
์ข‹์€ ํ•˜๋ฃจ ๋˜์„ธ์š”๐Ÿ€

win9-tech and others added 24 commits March 25, 2026 17:29
Copy link
Copy Markdown
Author

@yeo-li yeo-li 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 +27 to +52
@Override
public void checkRoute(List<Piece> pieces) {
int count = 0;
for (Piece piece : pieces) {
if (piece instanceof Cannon) {
throw new IllegalArgumentException(CANNOT_JUMP_WITH_CANNON);
}
if (!(piece instanceof Empty)) {
count++;
}
}
if (count != 1) {
throw new IllegalArgumentException(INVALID_TARGET_POSITION);
}
}

@Override
public void checkTarget(Piece piece) {
if (piece.getSide().equals(side)) {
throw new IllegalArgumentException(CANNOT_CAPTURE_OWN_PIECE);
}

if (piece instanceof Cannon) {
throw new IllegalArgumentException(CANNOT_CAPTURE_CANNON_WITH_CANNON);
}
}
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.

ํฌ๋ฅผ ์ œ์™ธํ•œ checkRoute, checkTarget์˜ ๊ตฌํ˜„์ด ๋™์ผํ•˜์—ฌ, ๋ถ€๋ชจ ํด๋ž˜์Šค Piece์— ๊ณตํ†ต ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ณ  ํฌ๋งŒ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ๋ถ€๋ชจ์— ๊ธฐ๋ณธ ๊ตฌํ˜„์„ ๋‘๊ณ  ์ผ๋ถ€๋งŒ override ํ•˜๋Š” ๋ฐฉ์‹์ด ์ ์ ˆํ•œ์ง€ ํ˜น์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋กœ ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์€์ง€ ์˜๊ฒฌ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹คโ˜บ๏ธ

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.

PieceType enum์„ ๊ฐ ๊ธฐ๋ฌผ์˜ ์ƒ์„ฑ ์ฑ…์ž„์„ ๋‹ด๋‹นํ•˜๋„๋ก ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ๋ฌผ๋งˆ๋‹ค ์ƒ์„ฑ ์‹œ ํ•„์š”ํ•œ ์ „๋žต(LinearMovement, PathMovement)์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, enum ๋‚ด๋ถ€์—์„œ create ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ ๊ธฐ๋ฌผ ์ƒ์„ฑ ๋กœ์ง๊ณผ ์ „๋žต์„ ํ•จ๊ป˜ ๋ฌถ์—ˆ์Šต๋‹ˆ๋‹ค!

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Board๋‚˜ Formation์—์„œ๋Š” PieceType๋งŒ ์•Œ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์ฒด์ ์ธ ์ƒ์„ฑ ๋ฐฉ์‹์ด๋‚˜ ์ „๋žต์— ์˜์กดํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, enum์— ์ƒ์„ฑ ๋กœ์ง๊นŒ์ง€ ํฌํ•จ๋˜๋ฉด์„œ ์ฑ…์ž„์ด ์ปค์ง€๊ณ  enum์ด ๋น„๋Œ€ํ•ด์ง€๋Š” ๊ตฌ์กฐ๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๊ณ ๋ฏผ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ๋ฃจ๋“ค๊ณผ ์ด์•ผ๊ธฐํ–ˆ์„ ๋•Œ๋Š” ์ด ๊ตฌ์กฐ๊ฐ€ ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง์ด๊ณ , ๋ณ„๋„์˜ Factory ํด๋ž˜์Šค๋ฅผ ๋‘๊ณ  Map์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‹จ์ˆœํ•˜๋‹ค๋Š” ์˜๊ฒฌ๋„ ์žˆ์–ด ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹จ ์ƒ๊ฐ์ด ๋“ค์—ˆ์–ด์š”.

์ €๋Š” enum์— ์ƒ์„ฑ ์ฑ…์ž„๊นŒ์ง€ ํฌํ•จ์‹œํ‚ค๋Š” ๋ฐฉ์‹์ด ์ ์ ˆํ•œ ์„ค๊ณ„์ธ์ง€, ์ƒ์„ฑ ์ฑ…์ž„์€ ๋ถ„๋ฆฌํ•ด์„œ ๋ณ„๋„์˜ Factory๋กœ ๋‘๋Š” ๊ฒƒ์ด ๋” ์ข‹์€์ง€ ํ˜น์€ ํ˜„์žฌ ๊ตฌ์กฐ๊ฐ€ ์œ ์ง€๋ณด์ˆ˜๋‚˜ ํ™•์žฅ์„ฑ ์ธก๋ฉด์—์„œ ์‹ค์ œ๋กœ ์˜๋ฏธ ์žˆ๋Š” ์ถ”์ƒํ™”์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

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 +19 to +22
public static Position of(int x, int y) {
validateOutOfRange(x, y);
return CACHE.computeIfAbsent(x * 100 + y, k -> new Position(x, y));
}
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.

Position์„ ์ƒ์„ฑํ•  ๋•Œ, ์ž…๋ ฅ๊ฐ’์„ ์–ด๋””์„œ ํŒŒ์‹ฑํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ์ง€์— ๋Œ€ํ•ด ๊ณ ๋ฏผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ตฌ์กฐ์—์„œ๋Š” InputView์—์„œ scanner.nextInt()๋ฅผ ์‚ฌ์šฉํ•ด ์ขŒํ‘œ๋ฅผ int๋กœ ํŒŒ์‹ฑํ•œ ๋’ค Position์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ int ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด, InputView ๋‹จ๊ณ„์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ "์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”"์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์ •ํ™•ํ•œ ๋ฉ”์‹œ์ง€๋ผ๊ณ  ๋А๋‚„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ String์„ ๊ทธ๋Œ€๋กœ Position๊นŒ์ง€ ๋„˜๊ฒจ์„œ ํ˜•๋ณ€ํ™˜๊ณผ ๋ฒ”์œ„ ๊ฒ€์ฆ์„ Position ๋‚ด๋ถ€์—์„œ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๋„ ํŽ˜์–ด์™€ ๋…ผ์˜๋ฅผ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ €ํฌ๊ฐ€ ๋‚ด๋ฆฐ ๊ฒฐ๋ก ์€ of() ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ํ˜•๋ณ€ํ™˜์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์€ ๊ณผ๋„ํ•œ ์ฑ…์ž„์ด๊ธฐ ๋•Œ๋ฌธ์—, ์™ธ๋ถ€์—์„œ ํ˜•๋ณ€ํ™˜์„ ํ•œ ๋’ค์— ๊ทธ ๊ฐ’์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ํ•˜๋Š”๊ฒŒ ๋” ์ข‹์€ ์„ค๊ณ„๋ผ๊ณ  ๊ฒฐ๋ก  ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์ขŒํ‘œ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ํ˜•๋ณ€ํ™˜ ์ž์ฒด๋„ Position์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์˜ ์ผ๋ถ€๋ผ๋ฉด ํ˜•๋ณ€ํ™˜ ์—ญ์‹œ Position.of()์˜ ์ฑ…์ž„์œผ๋กœ ๋ณด๋Š” ๊ฒƒ์ด ๋งž์ง€ ์•Š์„๊นŒ ํ•˜๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ƒํ™ฉ์—์„œ ์ž…๋ ฅ๊ฐ’์˜ ํŒŒ์‹ฑ์„ InputView์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ์ง€, ์•„๋‹ˆ๋ฉด Position ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์„ค๊ณ„์ธ์ง€ ๊ณ ๋ฏผ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ํ”ผ๋“œ๋ฐฑ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์ด ์ƒํ™ฉ์—์„œ ์ž…๋ ฅ๊ฐ’์˜ ํŒŒ์‹ฑ์„ InputView์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ์ง€, ์•„๋‹ˆ๋ฉด Position ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์„ค๊ณ„์ธ์ง€ ๊ณ ๋ฏผ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ํ”ผ๋“œ๋ฐฑ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:)

Position์€ ์ขŒํ‘œ ๊ฐ’ ๊ฐ์ฒด์ธ ๋งŒํผ, ๋ฌธ์ž์—ด ํŒŒ์‹ฑ๋ณด๋‹ค๋Š” ํŒŒ์‹ฑ๋œ ๊ฐ’์˜ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์— ์ง‘์ค‘ํ•˜๋Š” ํŽธ์ด ์—ญํ• ์ด ๋” ์„ ๋ช…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๐Ÿ˜ƒ

๋‹ค๋งŒ ํ˜„์žฌ์ฒ˜๋Ÿผ InputView์—์„œ ๋ฐ”๋กœ nextInt()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ์ž…๋ ฅ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ค์›Œ ๋ณด์—ฌ, ๋ฌธ์ž์—ด ์ž…๋ ฅ์€ View์—์„œ ๋ฐ›๊ณ  ํ˜•๋ณ€ํ™˜๊ณผ ์žฌ์ž…๋ ฅ ํ๋ฆ„์€ 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.

์˜๊ฒฌ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹คโ˜บ๏ธ ๊ทธ๋ ‡๋‹ค๋ฉด ํ˜น์‹œ Position์ด ํ˜•๋ณ€ํ™˜์„ ํ•˜์ง€ ์•Š๊ณ  ํŒŒ์‹ฑ๋œ ๊ฐ’์˜ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์—๋งŒ ์ง‘์ค‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ƒ์„ฑ์ž์— ๊ฒ€์ฆ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•ด๋„ ๊ดœ์ฐฎ์„์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!

Copy link
Copy Markdown

@Rok93 Rok93 left a comment

Choose a reason for hiding this comment

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

์„œ์—ฌ ์•ˆ๋…•ํ•˜์„ธ์š”~
์žฅ๊ธฐ ๋ฏธ์…˜์„ ํ•จ๊ป˜ํ•˜๊ฒŒ๋œ ๋กœํ‚ค์ž…๋‹ˆ๋‹ค.

๊ฝค ์–ด๋ ค์šด ๋ฏธ์…˜์ธ๋ฐ ์ „์ฒด์ ์œผ๋กœ ์ž˜ ์ง„ํ–‰ํ•ด์ฃผ์…จ๋„ค์š”. ๐Ÿ‘๐Ÿ‘

๋‚จ๊ฒจ์ฃผ์‹  ์งˆ๋ฌธ์—๋Œ€ํ•ด์„œ ์ œ ์ƒ๊ฐ๋“ค ๋‚จ๊ฒจ๋‘์—ˆ๊ณ  ์ถ”๊ฐ€๋กœ ๋ช‡๋ช‡ ์ฝ”๋ฉ˜ํŠธ๋„ ๋‚จ๊ฒจ๋‘์—ˆ์œผ๋‹ˆ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆด๊ฒŒ์š” ๐Ÿ˜„

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

class ElephantTest {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Image

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

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.

์•— ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค..!ใ…  ๋‹ค์Œ์—” ๊ด€๋ จํ•ด์„œ ๊ผญ ํ™•์ธํ•œ ๋’ค ์ œ์ถœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿฅฒ

public void checkRoute(List<Piece> pieces) {
for(Piece piece : pieces) {
if(!(piece instanceof Empty)) {
throw new IllegalArgumentException(CANNOT_CAPTURE_OWN_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

@yeo-li yeo-li Apr 1, 2026

Choose a reason for hiding this comment

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

๊ฒฝ๋กœ๊ฐ€ ๋ง‰ํ˜”๊ธฐ ๋•Œ๋ฌธ์— "์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค"๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•ด์•ผ๊ฒ ๋„ค์š”! ๋ฐ”๋กœ ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿฅฒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

public int readTargetXPosition() {
System.out.println();
System.out.println("๋ชฉ์ ์ง€ x ์ขŒํ‘œ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (x ๋ฒ”์œ„ 1 ~ 9)");
return scanner.nextInt();
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

ํ˜„์žฌ ์ขŒํ‘œ ์ž…๋ ฅ์€ Scanner.nextInt()๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด, ๋ฌธ์ž ์ž…๋ ฅ ์‹œ InputMismatchException์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์‹ค์ˆ˜๋กœ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ์—๋Œ€ํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐ”๋กœ ์ข…๋ฃŒํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์žฌ์ž…๋ ฅ์„ ๋ฐ›๋„๋กํ•ด์ฃผ๋ฉด ์–ด๋–จ๊นŒ์š”?
์ง€๊ธˆ๊ณผ ๊ฐ™์€ ์ฝ˜์†” ๊ฒŒ์ž„์€ ์‹ค์ˆ˜๋กœ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฌ์šด ํ™˜๊ฒฝ์ด๋ผ ์ƒ๊ฐํ•ด์š”. ๐Ÿฅน

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์—์„œ Scanner.nextInt()๋ฅผ ์ด์šฉํ•ด ๋ฐ˜ํ™˜ํ•˜๋˜ ๊ธฐ์กด์˜ ๊ตฌ์กฐ์—์„œ InputView์—์„œ String์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ค‘๊ฐ„์— Parser.parseInput()์ด๋ผ๋Š” ์œ ํ‹ธ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด String์„ int๋กœ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค! ํ”ผ๋“œ๋ฐฑ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹คโ˜บ๏ธ


import java.util.List;

public abstract class MovementStrategy {
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. ์ด๋™ ๊ทœ์น™ ๊ฒ€์ฆ ์ฑ…์ž„ ๋ถ„๋ฆฌ ๊ตฌ์กฐ์˜ ์ ์ ˆ์„ฑ
    Board.movePiece์—์„œ ํ„ด/์†Œ์œ ๊ถŒ/๊ฒฝ๋กœ/๋ชฉ์ ์ง€ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์‹ค์ œ ์ด๋™ ๊ฐ€๋Šฅ ๊ฒฝ๋กœ ๊ณ„์‚ฐ์€ MovementStrategy(PathMovement, LinearMovement)๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์ด ์ฑ…์ž„ ๋ถ„๋ฆฌ๊ฐ€ ์œ ์ง€๋ณด์ˆ˜/ํ™•์žฅ ์ธก๋ฉด์—์„œ ์ ์ ˆํ•œ์ง€ ํ”ผ๋“œ๋ฐฑ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:)

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

์ œ๊ฐ€ ๋А๋ผ๊ธฐ์—๋Š”

  • Board๋Š” ๊ฒฝ๊ธฐ ์ง„ํ–‰ ๋‹ด๋‹น์ž
  • Piece์™€ MovementStrategy๋Š” ๊ฐ ๊ธฐ๋ฌผ์˜ ์›€์ง์ž„ ๊ทœ์น™ ๋‹ด๋‹น
    ์˜ ์—ญํ• ์„ ๊ฐ€์ง€๋Š” ๊ฒƒ์œผ๋กœ ์ดํ•ดํ–ˆ์–ด์š”.

๋‹ค๋งŒ ํ˜„์žฌ Board๊ฐ€ ์ด๋™ ๊ทœ์น™๊นŒ์ง€ ํ•จ๊ป˜ ํŒ๋‹จํ•˜๊ณ  ์žˆ์–ด ์—ญํ•  ๋ฒ”์œ„๊ฐ€ ๋‹ค์†Œ ๋„“์–ด ๋ณด์—ฌ์š”.
๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์œผ๋กœ๋Š” ์ด๋™ ๊ทœ์น™ ํŒ๋‹จ์„ ๊ธฐ๋ฌผ ์ชฝ์— ๋” ๋ชจ์œผ๋ฉด ์ด๋™ ๊ทœ์น™์˜ ์‘์ง‘๋„๋ฅผ ๋” ๋†’์ผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ์‹ถ์–ด์š”. ๐Ÿค”

Copy link
Copy Markdown
Author

@yeo-li yeo-li Apr 2, 2026

Choose a reason for hiding this comment

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

ํ”ผ๋“œ๋ฐฑ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ˜Š
๋ง์”€ํ•ด์ฃผ์‹  ๋ฐฉํ–ฅ๋Œ€๋กœ Board์—์„œ ์ด๋™ ๊ทœ์น™ ํŒ๋‹จ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•ด๋ณด๋ ค ํ–ˆ๊ณ , ์ฒ˜์Œ์—๋Š” Piece์— ๊ทœ์น™์„ ๋ชจ์œผ๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋งŒ ์‹ค์ œ ๊ฒ€์ฆ ๊ณผ์ •์—์„œ Board๊ฐ€ Piece์˜ ์ด๋™ ๊ฒ€์ฆ ์ˆœ์„œ๋ฅผ ๊ฐ•ํ•˜๊ฒŒ ์กฐํ•ฉํ•˜๊ณ  ์žˆ์–ด, ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

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

์—ญํ•  ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ํ•ด์„œ ์‘์ง‘๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ฆฌํŒฉํ„ฐ๋งํ•ด๋ดค์Šต๋‹ˆ๋‹ค.
ํ˜น์‹œ ์—ฌ์ „ํžˆ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ํŽธํ•˜๊ฒŒ ํ”ผ๋“œ๋ฐฑ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

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.

  1. ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€ ์ผ๊ด€์„ฑ๊ณผ ์ž…๋ ฅ ์•ˆ์ •์„ฑ
    ๋„๋ฉ”์ธ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ถœ๋ ฅ์„ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๋ฉ”์‹œ์ง€์˜ ์˜๋ฏธ/์ •ํ™•์„ฑ์ด ์ถฉ๋ถ„ํ•œ์ง€์™€
    ์ž…๋ ฅ ํŒŒ์‹ฑ(nextInt) ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ View/Controller/Domain ์–ด๋””์—์„œ ๋‹ด๋‹นํ•˜๋Š” ๊ฒŒ ์ข‹์€์ง€ ์˜๊ฒฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

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

๋‹จ์ˆœํžˆ ์ž…๋ ฅ๊ฐ’์—๋Œ€ํ•œ ์ž…๋ ฅ ํ˜•์‹ ๋ฌธ์ œ๋Š” View๋‚˜ Controller ์ชฝ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ์ž์—ฐ์Šค๋Ÿฝ์ง€๋งŒ
์กธ๋ณ‘์„ ๋‘ ์นธ ์ „์ง„์‹œ์ผฐ๋‹ค๊ฑฐ๋‚˜ํ•˜๋Š” ์ผ€์ด์Šค๋Š” ๋„๋ฉ”์ธ ๊ทœ์น™์— ์œ„๋ฐฐ๋˜๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” Domain์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๐Ÿ˜ƒ

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.

์˜ˆ์™ธ ๋ฉ”์„ธ์ง€์— ์‹ ๊ฒฝ์„ ์ž˜ ์“ฐ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ๋Š”๋ฐ, ์•ž์œผ๋กœ ๋” ๋ฉด๋ฐ€ํžˆ ์ž‘์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹คโ˜บ๏ธ ๋‹ต๋ณ€ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

Comment on lines +19 to +22
public static Position of(int x, int y) {
validateOutOfRange(x, y);
return CACHE.computeIfAbsent(x * 100 + y, k -> new Position(x, y));
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์ด ์ƒํ™ฉ์—์„œ ์ž…๋ ฅ๊ฐ’์˜ ํŒŒ์‹ฑ์„ InputView์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ์ง€, ์•„๋‹ˆ๋ฉด Position ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์„ค๊ณ„์ธ์ง€ ๊ณ ๋ฏผ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ํ”ผ๋“œ๋ฐฑ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:)

Position์€ ์ขŒํ‘œ ๊ฐ’ ๊ฐ์ฒด์ธ ๋งŒํผ, ๋ฌธ์ž์—ด ํŒŒ์‹ฑ๋ณด๋‹ค๋Š” ํŒŒ์‹ฑ๋œ ๊ฐ’์˜ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์— ์ง‘์ค‘ํ•˜๋Š” ํŽธ์ด ์—ญํ• ์ด ๋” ์„ ๋ช…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๐Ÿ˜ƒ

๋‹ค๋งŒ ํ˜„์žฌ์ฒ˜๋Ÿผ InputView์—์„œ ๋ฐ”๋กœ nextInt()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ์ž…๋ ฅ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ค์›Œ ๋ณด์—ฌ, ๋ฌธ์ž์—ด ์ž…๋ ฅ์€ View์—์„œ ๋ฐ›๊ณ  ํ˜•๋ณ€ํ™˜๊ณผ ์žฌ์ž…๋ ฅ ํ๋ฆ„์€ Controller์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”. ๐Ÿค”

Comment on lines +29 to +31
public Board(Formation choFormation, Formation hanFormation) {
createBoard(choFormation, hanFormation);
}
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 ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ˆœ๊ฐ„์— ๋ฐ”๋กœ piece๋ฅผ ๋ฐฐ์น˜ํ•˜๊ธฐ๋ณด๋‹ค๋Š”, Board ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์œ„์ž„ํ•ด๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”?

์ฃผ์ƒ์„ฑ์ž๋Š” ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ Map<Position, Piece>๋ฅผ ๋ฐ›์•„์„œ ๋‹จ์ˆœํžˆ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ด๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”?

Suggested change
public Board(Formation choFormation, Formation hanFormation) {
createBoard(choFormation, hanFormation);
}
public Board(Map<Position, Piece> board) {
this.board = board;
}

Copy link
Copy Markdown
Author

@yeo-li yeo-li Apr 2, 2026

Choose a reason for hiding this comment

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

๊ธฐ์กด์—๋Š” ๊ธฐ๋ฌผ ์ด๋™/์ƒํƒœ ์กฐํšŒ๋ฟ ์•„๋‹ˆ๋ผ ์ดˆ๊ธฐ ๋ฐฐ์น˜(์ดˆ๊ธฐํ™”)๊นŒ์ง€ ํ•จ๊ป˜ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์—ˆ๊ณ ,
ํŠนํžˆ ์ดˆ๊ธฐํ™” ๋กœ์ง์ด ์ปค์ง€๋ฉด์„œ Board์˜ ์ฑ…์ž„์ด ๋‹ค์†Œ ๋ฌด๊ฑฐ์›Œ์ ธ ๋ณด์—ฌ, ํ•ด๋‹น ๋ถ€๋ถ„์„ BoardFactory๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค:)
์ด์ œ Board๋Š” ์ƒ์„ฑ์ž๋กœ Map<Position, Piece>๋ฅผ ๋ฐ›์•„ ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์ดํ›„์—๋Š” ๋ณธ๋ž˜ ์ฑ…์ž„์ธ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์ด๋™์— ์ง‘์ค‘ํ•˜๋„๋ก ์ •๋ฆฌํ–ˆ์–ด์š”โ˜บ๏ธ
์ด๋ ‡๊ฒŒ ๋ถ„๋ฆฌํ•˜๋‹ˆ Board์˜ ์‘์ง‘๋„๊ฐ€ ๋†’์•„์กŒ์Šต๋‹ˆ๋‹ค:)
์ข‹์€ ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!


public static Position of(int x, int y) {
validateOutOfRange(x, y);
return CACHE.computeIfAbsent(x * 100 + y, k -> new Position(x, y));
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

์˜ˆ๋ฅผ๋“ค๋ฉด ๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ Map<Integer, Map<Integer, Point>>๋กœ CACHE๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ ๋” ์ง๊ด€์ ์ด์ง€ ์•Š๋‚˜ ์‹ถ์—ˆ์–ด์š”. ๐Ÿ˜ƒ

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.

๋‹จ์ˆœํ•œ key์—ฌ๋„ ์˜๋ฏธ ์ถ”๋ก ์ด ์‰ฝ๊ฒŒ ์ง๊ด€์ ์œผ๋กœ ์ ์–ด์•ผํ•˜๋Š” ๊ฑธ ์ฒ˜์Œ ์ƒ๊ฐํ•ด๋ณธ ๊ฒƒ ๊ฐ™์•„์š”! ๋ฐ”๋กœ ์ ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! ํ”ผ๋“œ๋ฐฑ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ€

public enum Side {
CHO,
HAN,
NONE;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

NONE์˜ ๊ฒฝ์šฐ ์–ด๋–ค ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๊ฑธ๊นŒ์š”? ๐Ÿค”

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.

ํ”ผ๋“œ๋ฐฑ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ˜Š

์ฒ˜์Œ์— Side.NONE์„ ๋‘” ์ด์œ ๋Š” Empty ์นธ์˜ ์ง„์˜์„ ๋ช…์‹œํ•ด์„œ, getSide() ํ˜ธ์ถœ์ด๋‚˜ ์ง„์˜ ๋น„๊ต ์‹œ NullPointerException์„ ์˜ˆ๋ฐฉํ•˜๋ ค๋Š” ๋ชฉ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ํฌ๋ฃจ๋“ค๊ณผ ๋…ผ์˜ํ•ด๋ณด๋‹ˆ, Empty๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๊ธฐ๋ฌผ์ด ์—†๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž„์˜์˜ ์ง„์˜ ๊ฐ’์„ ๊ฐ–๋Š” ๊ฒƒ๋ณด๋‹ค side = null์ด ๋„๋ฉ”์ธ ์˜๋ฏธ์ƒ ๋” ์ž์—ฐ์Šค๋Ÿฝ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ˜„์žฌ๋Š” Side.NONE์„ ์ œ๊ฑฐํ•˜๊ณ  isSameSide() ์ค‘์‹ฌ์œผ๋กœ ๋น„๊ตํ•˜๋„๋ก ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋ง์”€ํ•ด์ฃผ์‹  ๊ฒƒ์ฒ˜๋Ÿผ ์—ฌ์ „ํžˆ side.equals()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์ด ๋‚จ์•„ ์žˆ์–ด null ์•ˆ์ „์„ฑ ๋ฆฌ์Šคํฌ๊ฐ€ ์™„์ „ํžˆ ์‚ฌ๋ผ์ง„ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ ์˜๋ฏธ(Empty์˜ null)์™€ ์•ˆ์ •์„ฑ(null ๋ฐฉ์ง€) ์‚ฌ์ด์—์„œ, ๋กœํ‚ค๋ผ๋ฉด Side.NONE์œผ๋กœ ์•ˆ์ „์„ฑ์„ ์šฐ์„ ํ•˜์‹ค์ง€, ์•„๋‹ˆ๋ฉด null์„ ํ—ˆ์šฉํ•˜๋˜ ์œ„ํ—˜์„ ์ถ”๊ฐ€์ ์œผ๋กœ ํ†ต์ œํ•˜์‹ค์ง€ ํ”ผ๋“œ๋ฐฑ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ๐Ÿ‘๐Ÿป

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

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