Skip to content

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

Open
Seonwu-K wants to merge 82 commits intowoowacourse:seonwu-kfrom
Seonwu-K:seonwu-k

Conversation

@Seonwu-K
Copy link
Copy Markdown

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

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

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

์„œ๋ฌธ

์•ˆ๋…•ํ•˜์„ธ์š” ์ œ๋‚˜! ๋ฆฌ๋ทฐ ์š”์ฒญ์„ ์ง€๊ฐํ•ด๋ฒ„๋ฆฐ ๋ฃจ๋””์ž…๋‹ˆ๋‹ค ๐Ÿฅฒ

์ €๋Š” ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ ์š”๊ตฌ์‚ฌํ•ญ ์ถฉ์กฑ๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ ์›์น™, ๊ทธ๋ฆฌ๊ณ  ์ตœ๊ทผ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ํ•จ๊ป˜ ์ ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ์ง„ํ–‰ ๊ณผ์ •์—์„œ ์„ค๊ณ„์™€ ๊ตฌํ˜„ ์†๋„๊ฐ€ ํฌ๊ฒŒ ๋А๋ ค์กŒ๊ณ ,
์ค‘๊ฐ„๋ถ€ํ„ฐ๋Š” ์šฐ์„  ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•œ ๋’ค ๋ฆฌํŒฉํ† ๋ง์œผ๋กœ ๋ณด์™„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐฉํ–ฅ์„ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์—์„œ ๋ช‡ ๊ฐ€์ง€ ๊ณ ๋ฏผ์ด ์ƒ๊ฒจ ์˜๊ฒฌ์„ ์—ฌ์ญ™๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์„ค๊ณ„์—์„œ ์ค‘์ ์ ์œผ๋กœ ๋ณธ ๋ถ€๋ถ„

1. Board๋ฅผ ๋‹จ์ผ ์ƒํƒœ ์ €์žฅ์†Œ์ฒ˜๋Ÿผ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค

๊ธฐ๋ฌผ์˜ ์œ„์น˜ ์ƒํƒœ๋ฅผ Board๋งŒ ๊ด€๋ฆฌํ•˜๋„๋ก ๋‘๊ณ , ๋‹ค๋ฅธ ๊ฐ์ฒด๋Š” ํ˜„์žฌ ํŒ ์ƒํƒœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ๋งŒ ํ˜‘๋ ฅํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

public class Board {
    private final Map<Position, Piece> pieces;
}

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

2. ์ด๋™ ๊ทœ์น™ ์ •์˜์™€ ์‹ค์ œ ํŒ์ •์€ ๋ถ„๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค

๊ธฐ๋ฌผ๋ณ„ ์ด๋™ ๊ทœ์น™์€ MoveStrategy๊ฐ€ ๋งŒ๋“ค๊ณ , ์‹ค์ œ ์ด๋™ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋Š” ํ˜„์žฌ ์žฅ๊ธฐํŒ ์ƒํƒœ์™€ ํ•จ๊ป˜ ํŒ๋‹จํ•˜๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

return piece.makeRoutes(currentPosition).stream()
        .filter(route -> route.endPos().isInsideBoard())
        .filter(route -> piece.canMove(route, getBlockingPieces(route), getDestinationPiece(route)))
        .toList();

์ด ๊ณผ์ •์—์„œ MovePath๋Š” ๊ทœ์น™ ํ…œํ”Œ๋ฆฟ, Route๋Š” ์‹ค์ œ ์ขŒํ‘œ๊ฐ€ ๊ณ„์‚ฐ๋œ ๊ฒฝ๋กœ๋กœ ์—ญํ• ์„ ๋‚˜๋ˆ„์—ˆ์Šต๋‹ˆ๋‹ค.

3. Position์€ ์ •์  ํŒฉํ† ๋ฆฌ์™€ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค

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

์ด๋ฒˆ์—๋Š” ํ•ด๋‹น ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ์ด์ ์„ ์ฒดํฌํ•˜๊ณ 

๋™์ผ ์ขŒํ‘œ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๋งŒ๋“ค์ง€ ์•Š๋„๋ก ์บ์‹ฑ์„ ์ ์šฉํ•˜๊ณ , ์ƒ์„ฑ ๊ฒฝ๋กœ๋ฅผ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

private static final Map<Integer, Position> CACHE = createCache();

public static Position of(int row, int column) {
    validateBoardIndex(row, column);
    return CACHE.get(toCacheKey(row, column));
}

๋ฆฌ๋ทฐ ๋ฐ›๊ณ  ์‹ถ์€ ๋ถ€๋ถ„

1. โ€œ๊ตฌํ˜„ ์šฐ์„  โ†’ ๋ฆฌํŒฉํ† ๋งโ€ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์˜๊ฒฌ

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

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

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

2. Board, Piece, MoveStrategy์˜ ์ฑ…์ž„ ๋ถ„๋ฐฐ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฌ์šด์ง€

ํ˜„์žฌ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์—ญํ• ์„ ๋‚˜๋ˆด์Šต๋‹ˆ๋‹ค.

  • Board: ํ˜„์žฌ ์žฅ๊ธฐํŒ ์ƒํƒœ ๊ด€๋ฆฌ, ์‹ค์ œ ์ด๋™ ๋ฐ˜์˜
  • Piece: ์ž์‹ ์˜ ์ด๋™ ์ „๋žต ๋ณด์œ 
  • MoveStrategy: ์ด๋™ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ ์ƒ์„ฑ, ๊ทœ์น™ ํŒ์ •

๋‹ค๋งŒ ์ด ๊ณผ์ •์—์„œ Board๊ฐ€ ์ƒํƒœ ์กฐํšŒ๋ฅผ ๋งŽ์ด ์ œ๊ณตํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๊ฒƒ์ด Tell, Don't Ask๋‚˜ ์บก์Аํ™” ๊ด€์ ์—์„œ ๋ถ€์ ์ ˆ ํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋˜์—ˆ์ง€๋งŒ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„์ง€ ์ข‹์€ ๋ฐฉ์‹์„ ๋– ์˜ฌ๋ฆฌ์ง€ ๋ชปํ•ด ํ˜„์žฌ์˜ ๊ตฌ์กฐ๋กœ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

3. Board๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ƒํƒœ๋ฅผ ๋ชจ์€ ๊ตฌ์กฐ๊ฐ€ ์ ์ ˆํ•œ์ง€

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

4. ์ •์  ํŒฉํ† ๋ฆฌ ๋„์ž…์ด ํƒ€๋‹นํ–ˆ๋Š”์ง€

ํŠนํžˆ Position์—์„œ ์ •์  ํŒฉํ† ๋ฆฌ์™€ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•œ ์„ ํƒ์ด ์ ์ ˆํ–ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
๋‹จ์ˆœ ํŽธ์˜์„ฑ ์ˆ˜์ค€์ธ์ง€, ์ƒ์„ฑ ์ œ์–ด์™€ ์žฌ์‚ฌ์šฉ ์ด์ ์„ ์‹ค์ œ๋กœ ์ž˜ ์‚ด๋ฆฐ ์ผ€์ด์Šค์ธ์ง€ ์˜๊ฒฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

5. ์ธํ„ฐํŽ˜์ด์Šค default ๋ฉ”์„œ๋“œ ํ™œ์šฉ์ด ์ ์ ˆํ–ˆ๋Š”์ง€

๊ณตํ†ต ์ฝ”๋“œ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ, MoveStrategy์—์„œ ๊ณตํ†ต ๊ฒฝ๋กœ ์ƒ์„ฑ ๋กœ์ง์„ default ๋ฉ”์„œ๋“œ๋กœ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.
์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ ๊ทน์ ์œผ๋กœ ๋„์ž…ํ–ˆ๋˜ ๊ฒƒ์€ ์ฒ˜์Œ์ด๋ผ ์ด ๋ฐฉ์‹์ด ์ข‹์€ ์ถ”์ƒํ™”์ธ์ง€, ์•„๋‹ˆ๋ฉด ์ถ”์ƒ ํด๋ž˜์Šค ์ชฝ์ด ๋” ์ ์ ˆํ–ˆ๋Š”์ง€ ๊ธฐ์ค€์„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Seonwu-K added 30 commits March 25, 2026 00:19
- ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ž‘์„ฑ
- ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฆฌ์ŠคํŠธ ์ˆœ์„œ ์ˆ˜์ •
Seonwu-K added 15 commits March 28, 2026 14:46



- [ ] [ํŒ์ •] ์žฅ๊ตฐ ๋ฉ๊ตฐ ๊ตฌํ˜„
Copy link
Copy Markdown

@yenawee yenawee Mar 30, 2026

Choose a reason for hiding this comment

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

์‚ฌ์ดํด 1 ๊ธฐ๋Šฅ ๊ตฌํ˜„๋ชฉ๋ก ๐Ÿ’ฏ
๐Ÿ˜„ ์‚ฌ์ดํด 2 ๋„ ๋จผ์ € ๊ณ ๋ คํ•ด๋ณด์‹ ๊ฑด๊ฐ€์š” ?

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.

๋งž์Šต๋‹ˆ๋‹ค.. ์‚ฌ์ „ํ•™์Šต ๋ฐ ํ† ๋ก  ํ™œ๋™ ๊นŒ์ง€๋Š” ์‚ฌ์ดํด1๊นŒ์ง€๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์˜์‹ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ
ํŽ˜์–ด์™€ ์„ค๊ณ„๋ฅผ ์งœ๋‹ค๊ฐ€ ์‚ฌ์ดํด 1,2 ๊ตฌ๋ถ„์„ ์žŠ๊ณ  ๊ทธ๋ƒฅ '์žฅ๊ธฐ'๋ผ๋Š” ๊ฒŒ์ž„ ์ „์ฒด์˜ ๋กœ์ง์„ ๊ณ ๋ฏผํ•˜๋ฉด์„œ ์„ค๊ณ„๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ..

import java.util.Scanner;

public class InputView {
private static final String FORMATION_CHOICE_PROMPT = " ์ƒ์ฐจ๋ฆผ ์„ ํƒ (1. ์•ˆ์ƒ 2. ๋ฐ”๊นฅ์ƒ 3. ์ขŒ์ƒ 4. ์šฐ์ƒ) > ";
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.

์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์‹ค์ œ ์žฅ๊ธฐ ๊ฒŒ์ž„์—์„œ๋„ ์ƒ์ฐจ๋ฆผ ๋ช…์นญ๋ณด๋‹ค๋Š” ๋ฐฐ์น˜ ์ˆœ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…์„ ํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์„ ๋†“์ณค๋„ค์š”..! ํ•ด๋‹น๋ถ€๋ถ„ ๋ฐ˜์˜ํ•ด์„œ ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@@ -0,0 +1,8 @@
public class Main {

public static void main(String[] args) {
Copy link
Copy Markdown

@yenawee yenawee Mar 30, 2026

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

@Seonwu-K Seonwu-K Apr 2, 2026

Choose a reason for hiding this comment

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

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

public class InputView {
private static final String FORMATION_CHOICE_PROMPT = " ์ƒ์ฐจ๋ฆผ ์„ ํƒ (1. ์•ˆ์ƒ 2. ๋ฐ”๊นฅ์ƒ 3. ์ขŒ์ƒ 4. ์šฐ์ƒ) > ";
private static final String PIECE_CHOICE_PROMPT = " ์ฐจ๋ก€, ์„ ํƒํ•  ๊ธฐ๋ฌผ ๋ฒˆํ˜ธ > ";
private static final String ROUTE_CHOICE_PROMPT = "์ด๋™ํ•  ๊ฒฝ๋กœ ๋ฒˆํ˜ธ ์„ ํƒ (0์€ ๋’ค๋กœ๊ฐ€๊ธฐ) > ";
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 class TurnManager {

private TeamColor currentTurn;
private int moveCount;
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.

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

}

public Position next(Direction direction) {
final int nextRow = this.row.value() + direction.dRow();
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

direction ์˜ ๊ฐ’์„ ๊บผ๋‚ด์„œ ๋”ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๊ณ  direction ์—๊ฒŒ ๋‹ค์Œ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ด๋ณผ๊นŒ์š”?

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.

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

return pieces.entrySet().stream()
.filter(entry -> entry.getValue().getTeamColor() == teamColor)
.sorted((left, right) -> {
final int rowCompare = Integer.compare(left.getKey().row(), right.getKey().row());
Copy link
Copy Markdown

@yenawee yenawee Mar 30, 2026

Choose a reason for hiding this comment

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

์ขŒํ‘œ์˜ ๋Œ€์†Œ ๋น„๊ต๋Š” Board๊ฐ€ ํ•  ์ผ์ด ์•„๋‹ˆ๋ผ, ์ขŒํ‘œ๋ฅผ ๋“ค๊ณ  ์žˆ๋Š” Position ๊ฐ์ฒด ์Šค์Šค๋กœ๊ฐ€ ํŒ๋‹จํ•ด์•ผ ํ•  ์ฑ…์ž„์œผ๋กœ ๋ณด์—ฌ์š”.
Comparable์„ ๊ตฌํ˜„ํ•ด๋ณผ๊นŒ์š”?

Copy link
Copy Markdown
Author

@Seonwu-K Seonwu-K Apr 2, 2026

Choose a reason for hiding this comment

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

ํฌ์ง€์…˜์ด ์Šค์Šค๋กœ ์ž์‹ ์˜ ์ƒํƒœ์— ๋Œ€ํ•ด์„œ ์ฑ…์ž„์„ ์ง€๋Š”๊ฒŒ ๋Šฅ๋™์ ์ธ ์บก์Аํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์—์„œ ๋งž๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
Comparable์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ด๋ณธ ์ ์ด ์—†์–ด์„œ ์–ด๋–ค ์ƒํ™ฉ์— ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„์ง€ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐพ์•„๋ดค๋Š”๋ฐ,

This interface imposes a total ordering on the objects of each class that implements it. This ordering is referred to as the class's natural ordering

ํ•ด๋‹น ์„ค๋ช…์„ ์ฝ๊ณ  ์ž์—ฐ์Šค๋Ÿฌ์šด ์ˆœ์„œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’์— ๋Œ€ํ•ด Comparable์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

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

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

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.

๋‹ค๋ฅธ ๋ฆฌ๋ทฐ ๋Œ“๊ธ€์—๋„ ๋‚จ๊ฒผ๋“ฏ ์ฒ˜์Œ์—๋Š” ์‚ฌ์ดํด1๋งŒ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ
ํŽ˜์–ด์™€ ์„ค๊ณ„๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋‹ˆ ๋ฒ”์œ„๊ฐ€ ํ™•์žฅ๋˜์–ด ์‚ฌ์ดํด2 ๋‚ด์šฉ๊นŒ์ง€ ๋ฏธ๋ฆฌ ์„ค๊ณ„ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ ,
๋’ค๋Šฆ๊ฒŒ ์‚ฌ์ดํด2 ์˜์—ญ์„ ์•ž์„œ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๋Š” ์ ์„ ๊นจ๋‹ซ๊ฒŒ ๋์—ˆ์Šต๋‹ˆ๋‹ค.

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

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

public List<Piece> getBlockingPieces(Route 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.

private ํ•จ์ˆ˜์ผ๊นŒ์š”?

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.

getBlockingPieces()๋Š” ์™ธ๋ถ€์— ๋…ธ์ถœํ•  ์˜๋„๊ฐ€ ์—†๋Š”, Board ๋‚ด๋ถ€์—์„œ ์ด๋™ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์กฐ ๋ฉ”์„œ๋“œ๋ผ์„œ, private์œผ๋กœ ์ˆ˜์ •์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

.toList();
}

public Optional<Piece> getDestinationPiece(Route 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.

private ํ•จ์ˆ˜์ผ๊นŒ์š”?

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.

getBlockingPieces()๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ private์œผ๋กœ ์ˆ˜์ •์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ๐Ÿ˜…

.orElseThrow(() -> new IllegalArgumentException("๋ณด๋“œ์— ์—†๋Š” ๊ธฐ๋ฌผ์ž…๋‹ˆ๋‹ค."));

return piece.makeRoutes(currentPosition).stream()
.filter(route -> route.endPos().isInsideBoard())
Copy link
Copy Markdown

@yenawee yenawee Mar 30, 2026

Choose a reason for hiding this comment

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

Position ๊ฐ์ฒด ์ž์ฒด๊ฐ€ ๋ณด๋“œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฐ’์œผ๋กœ๋Š” ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€ํ•˜๋„ค์š”! isInsideBoard() ๋Š” ํ˜„์žฌ ์—ฌ๊ธฐ์„œ ๋ฌด์˜๋ฏธํ•œ ๋ฉ”์„œ๋“œ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

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์€ ์ƒ์„ฑ ์‹œ์ ์— ์ด๋ฏธ ๋ณด๋“œ ๋ฒ”์œ„๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ์žˆ์–ด์„œ, ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์— ๋Œ€ํ•ด isInsideBoard()๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†๋Š”๊ฒŒ ๋งž๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

class ์ฐจ๋‹จ๊ฒ€์‚ฌ {
@Test
public void ๋งˆ๋Š”_์žฅ์• ๋ฌผ์ด_์—†์œผ๋ฉด_์ง€๋‚˜๊ฐˆ์ˆ˜_์žˆ๋‹ค(){
MoveStrategy moveStrategy = new PawnMoveStrategy();
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

strategy ํ™•์ธํ•ด์ฃผ์„ธ์š” (๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋“ค๋„)

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.

ํ…Œ์ŠคํŠธ ์ด๋ฆ„๊ณผ ์‹ค์ œ๋กœ ์ƒ์„ฑํ•œ strategy๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋„ค์š”. ๊ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฒ€์ฆํ•˜๋ ค๋Š” ๊ธฐ๋ฌผ๊ณผ ์‚ฌ์šฉํ•œ strategy๊ฐ€ ๋งž๋Š”์ง€ ์ „์ฒด์ ์œผ๋กœ ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค

import org.junit.jupiter.api.Test;

public class MoveStrategyTest {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

default ๋ฉ”์„œ๋“œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”

Copy link
Copy Markdown

@yenawee yenawee left a comment

Choose a reason for hiding this comment

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

์•ˆ๋…•ํ•˜์„ธ์š” ๋ฃจ๋””!
์žฅ๊ธฐ ๋ฏธ์…˜์œผ๋กœ ๋งŒ๋‚˜๊ฒŒ ๋˜์–ด์„œ ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค.

  1. Getter ์ง€์–‘ (๊ฐ์ฒด๊ฐ„ ์ฑ…์ž„ ๋ถ„๋ฐฐ ์žฌ๊ณ ๋ ค)
  2. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์˜ค๋ฅ˜ ํ™•์ธ ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค ์ถ”๊ฐ€

์ค‘์ ์œผ๋กœ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ ๋จผ์ € ํ•ด์ฃผ์„ธ์š” ๐Ÿ™‚

โ€œ๊ตฌํ˜„ ์šฐ์„  โ†’ ๋ฆฌํŒฉํ† ๋งโ€ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์˜๊ฒฌ

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

Board, Piece, MoveStrategy์˜ ์ฑ…์ž„ ๋ถ„๋ฐฐ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฌ์šด์ง€, Board๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ƒํƒœ๋ฅผ ๋ชจ์€ ๊ตฌ์กฐ๊ฐ€ ์ ์ ˆํ•œ์ง€

ํ˜„์žฌ๋กœ๋Š”, ์ฑ…์ž„๋ถ„๋ฐฐ๊ฐ€

Board : ์žฅ๊ธฐํŒ ์ƒํƒœ ๊ด€๋ฆฌ, ์‹ค์ œ ์ด๋™ ๋ฐ˜์˜ + ์ด๋™ ๊ฐ€๋Šฅ ๊ฒฝ๋กœ ํŒ๋ณ„ (๊ณผ๋ถ€ํ•˜๐Ÿšจ)
Piece : ์Šค์Šค๋กœ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ ์—†์Œ. teamColor์™€ moveStrategy๋ฅผ ๋ฌถ๋Š” ์šฉ๋„, MoveStrategy ์— ๋ชจ๋“  ํ–‰๋™ ์œ„์ž„
MoveStrategy : ๊ฒฝ๋กœ ์ƒ์„ฑ๊ณผ ์ด๋™ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํŒ๋‹จ 

๋กœ ๋ณด์—ฌ์š”.

์ „๋ฐ˜์ ์œผ๋กœ ๊ฒŒํ„ฐ๊ฐ€ ๋งŽ์•„์ง„ ์ด์œ ๋Š” Piece๋Š” ์•„๋ฌด ํŒ๋‹จ ๋Šฅ๋ ฅ์„ ๊ฐ–์ง€ ์•Š๊ณ  Strategy์— ์™„์ „ํžˆ ์œ„์ž„ํ•˜๋ฉด์„œ, Board๊ฐ€ Strategy๋ฅผ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์ฃผ๋Š” ์ค‘๊ฐ„์ž๊ฐ€ ๋˜์–ด์„œ์ธ ๊ฒƒ์œผ๋กœ ๋ณด์—ฌ์š”.
๋˜ํ•œ "์ด๋™ ๊ฐ€๋Šฅํ•œ์ง€ ํŒ๋‹จ"ํ•˜๋Š” ์ฑ…์ž„์ด Board์™€ MoveStrategy์— ๊ฑธ์ณ ์žˆ์–ด์š”. findMovableRoutes์—์„œ Board๊ฐ€ isInsideBoard() ํ•„ํ„ฐ๋ง์„ ํ•˜๊ณ , canMove ํŒ๋‹จ์€ MoveStrategy๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์ฒด๋“ค์˜ ์ฑ…์ž„์„ ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๊ณ  getter ์‚ฌ์šฉ์„ ์ง€์–‘ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ฆฌํŒฉํ„ฐ๋ง ์ง„ํ–‰ํ•ด๋ด์š”! (๋‹ค๋ฅธ ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ๋ณด๋‹ค ์ด ๋ถ€๋ถ„์— ๋จผ์ € ์ง‘์ค‘ํ•ด์ฃผ์„ธ์š”!!)

์ •์  ํŒฉํ† ๋ฆฌ ๋„์ž…์ด ํƒ€๋‹นํ–ˆ๋Š”์ง€

์žฅ๊ธฐํŒ ์œ„์น˜๋Š” 90๊ฐœ๋กœ ์œ ํ•œํ•˜๊ณ , ๋ถˆ๋ณ€์ด๊ณ , ๋ฐ˜๋ณต ์ฐธ์กฐ๋œ๋‹ค โ€” ์บ์‹ฑ์˜ ๊ต๊ณผ์„œ์ ์ธ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค. ์ž˜ ๋„์ž…ํ•˜์…จ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š” ๐Ÿ‘

์ธํ„ฐํŽ˜์ด์Šค default ๋ฉ”์„œ๋“œ ํ™œ์šฉ์ด ์ ์ ˆํ–ˆ๋Š”์ง€

์ƒํƒœ ์—†์ด ํ–‰์œ„๋งŒ ๊ณต์œ ํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ์ถ”์ƒํด๋ž˜์Šค๋ณด๋‹ค ์ธํ„ฐํŽ˜์ด์Šค default ๊ฐ€ ์ ์ ˆํ•œ ๋ฐฉ์‹์ด์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

}

@Nested
class ์ด๋™ {
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.

2 participants