[๐ ์ฌ์ดํด1 - ๋ฏธ์ (๋ณด๋ ์ด๊ธฐํ + ๊ธฐ๋ฌผ ์ด๋)] ๋ฃจ๋ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#256
[๐ ์ฌ์ดํด1 - ๋ฏธ์
(๋ณด๋ ์ด๊ธฐํ + ๊ธฐ๋ฌผ ์ด๋)] ๋ฃจ๋ ๋ฏธ์
์ ์ถํฉ๋๋ค.#256Seonwu-K wants to merge 82 commits intowoowacourse:seonwu-kfrom
Conversation
- ํ ์คํธ ์๋๋ฆฌ์ค ์์ฑ - ๊ธฐ๋ฅ ๊ตฌํ ๋ฆฌ์คํธ ์์ ์์
|
|
||
|
|
||
|
|
||
| - [ ] [ํ์ ] ์ฅ๊ตฐ ๋ฉ๊ตฐ ๊ตฌํ |
There was a problem hiding this comment.
์ฌ์ดํด 1 ๊ธฐ๋ฅ ๊ตฌํ๋ชฉ๋ก ๐ฏ
๐ ์ฌ์ดํด 2 ๋ ๋จผ์ ๊ณ ๋ คํด๋ณด์ ๊ฑด๊ฐ์ ?
There was a problem hiding this comment.
๋ง์ต๋๋ค.. ์ฌ์ ํ์ต ๋ฐ ํ ๋ก ํ๋ ๊น์ง๋ ์ฌ์ดํด1๊น์ง๋ง ๊ตฌํํ๋ฉด ๋๋ค๊ณ ์์ํ๊ณ ์์๋๋ฐ
ํ์ด์ ์ค๊ณ๋ฅผ ์ง๋ค๊ฐ ์ฌ์ดํด 1,2 ๊ตฌ๋ถ์ ์๊ณ ๊ทธ๋ฅ '์ฅ๊ธฐ'๋ผ๋ ๊ฒ์ ์ ์ฒด์ ๋ก์ง์ ๊ณ ๋ฏผํ๋ฉด์ ์ค๊ณ๋ฅผ ํ๊ฒ ๋์์ต๋๋ค ..
| import java.util.Scanner; | ||
|
|
||
| public class InputView { | ||
| private static final String FORMATION_CHOICE_PROMPT = " ์์ฐจ๋ฆผ ์ ํ (1. ์์ 2. ๋ฐ๊นฅ์ 3. ์ข์ 4. ์ฐ์) > "; |
There was a problem hiding this comment.
๋ง์๋ง์, ์๋ง์๋ง ์ ์ ๋ณด๋ ๊ฐ์ด ํ์ํด์ฃผ๋ฉด ์ฌ์ฉ์ ์ ์ฅ์์ ํธ๋ฆฌํ ๊ฑฐ ๊ฐ์์ :)
There was a problem hiding this comment.
์๊ฐํด๋ณด๋ ์ค์ ์ฅ๊ธฐ ๊ฒ์์์๋ ์์ฐจ๋ฆผ ๋ช ์นญ๋ณด๋ค๋ ๋ฐฐ์น ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ช ์ ํด์ค๋ค๋ ๊ฒ์ ๋์ณค๋ค์..! ํด๋น๋ถ๋ถ ๋ฐ์ํด์ ์์ ํ๊ฒ ์ต๋๋ค.
| @@ -0,0 +1,8 @@ | |||
| public class Main { | |||
|
|
|||
| public static void main(String[] args) { | |||
There was a problem hiding this comment.
ํด๋น ์ฝ๋๊ฐ ์๋์ฐ ํ๋ฉด ๊ธฐ์ค์์๋ ์ ์์ ์ผ๋ก ์ถ๋ ฅ์ด ๋์ง๋ง ๋งฅ๋ถ ํ๊ฒฝ์์๋ ๋ค๋ฅด๊ฒ ์ถ๋ ฅ์ด ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋งฅ๋ถ ํ๋ฉด ๊ธฐ์ค์์ ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋ ์ ์๋๋ก ์์ ํด๋ณด๊ฒ ์ต๋๋ค.
| 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์ ๋ค๋ก๊ฐ๊ธฐ) > "; |
There was a problem hiding this comment.
์ด๋๋ก ์ด๋ํ ์ ์๋์ง ๋์์์ด์ ๊ฒ์ ์งํ์ด ํธ๋ฆฌํ๋ค์ ! ๐ฏ
| public class TurnManager { | ||
|
|
||
| private TeamColor currentTurn; | ||
| private int moveCount; |
There was a problem hiding this comment.
ํด๋น ๋ณ์๋ ์ฌ์ดํด2๊น์ง ๊ตฌํ์ ๊ฐ์ ํ๊ณ ๋ฏธ๋ฆฌ ๋์ ํ๊ฒ ๋ ์ฝ๋์ธ๋ฐ ๋ฏธ์ ์งํ์ค์๋ ๋ฏธ์ณ ์ธ์งํ์ง ๋ชปํ์์ต๋๋ค.. ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ณ ํ์ธํด๋ณด๋ ๋น์ฅ ์ฐ์ง ์๋ ๋ณ์์์๋ ์ถํ ํ์ฅ์ ์ํด ๋์ ํ ์ผ์ด์ค๋ผ์ ์ฐ์ ์ ๊ฑฐํด๋๊ฒ ์ต๋๋ค!
| } | ||
|
|
||
| public Position next(Direction direction) { | ||
| final int nextRow = this.row.value() + direction.dRow(); |
There was a problem hiding this comment.
direction ์ ๊ฐ์ ๊บผ๋ด์ ๋ํ๋ ๊ฒ ์๋๊ณ direction ์๊ฒ ๋ค์ ์์น๋ฅผ ๊ณ์ฐํ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํด๋ณผ๊น์?
There was a problem hiding this comment.
๊ฐ์ฒด๋ก๋ถํฐ ๊ณ์ ๊ฐ์ ๊บผ๋ด์ค๋ ๊ตฌ์กฐ๊ฐ ๋๋๊ฒ ๋ถํธํ์ง๋ง ๋ฏธ์ ๊ตฌํ์ ๋จผ์ ๋ชฉํ๋ก ๋๊ณ ํํ์ ํ๋ค ๋ณด๋ ๊ฒฐ๊ตญ ์บก์ํ๊ฐ ๊นจ์ง๋๋ก ์ฝ๋๋ฅผ ์ง๊ฒ ๋ ๊ฒ ๊ฐ์ต๋๋ค.. ๋ฆฌ๋ทฐ ๋ฐ์ํ์ฌ 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()); |
There was a problem hiding this comment.
์ขํ์ ๋์ ๋น๊ต๋ Board๊ฐ ํ ์ผ์ด ์๋๋ผ, ์ขํ๋ฅผ ๋ค๊ณ ์๋ Position ๊ฐ์ฒด ์ค์ค๋ก๊ฐ ํ๋จํด์ผ ํ ์ฑ
์์ผ๋ก ๋ณด์ฌ์.
Comparable์ ๊ตฌํํด๋ณผ๊น์?
There was a problem hiding this comment.
ํฌ์ง์
์ด ์ค์ค๋ก ์์ ์ ์ํ์ ๋ํด์ ์ฑ
์์ ์ง๋๊ฒ ๋ฅ๋์ ์ธ ์บก์ํ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ ์์ ๋ง๋ ๊ฒ ๊ฐ์ต๋๋ค.
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๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ์ ํ๋ค๊ณ ํ๋จ๋๋๋ฐ ์ ๋์ ์๊ฒฌ์ด ๊ถ๊ธํฉ๋๋ค
There was a problem hiding this comment.
์ฌ์ดํด 2 ์ ๋ํ ๋ด์ฉ์ ์ฌ์ดํด 1 ๋ฏธ์
์๋ฃ ํ ์๊ฐํด๋ณด๋๊ฒ ์ข์๊ฑฐ๊ฐ์์
๋ฏธ๋ฆฌ ์ฌ์ดํด2์ ๋๋นํด์ ์ค๊ณ๋ฅผ ์งํํ๋ ๊ฒ๋ณด๋ค ์๊ตฌ์ฌํญ์ด ์ถ๊ฐ๋์์๋ ์ผ๋ง๋ ๋ง์ด ์ฝ๋๋ฅผ ๋ฆฌํฉํฐ๋งํด์ผํ๋์ง, ์ค๊ณ๋ฅผ ์ด๋ป๊ฒ ๊ณ ์ณ์ผ ํ๋์ง ๊ณ ๋ฏผํ๋ ์ ์์ ํ์ตํ๋๊ฒ ์๋ค๊ณ ์๊ฐํฉ๋๋ค!
There was a problem hiding this comment.
๋ค๋ฅธ ๋ฆฌ๋ทฐ ๋๊ธ์๋ ๋จ๊ฒผ๋ฏ ์ฒ์์๋ ์ฌ์ดํด1๋ง ๊ณ ๋ คํ๊ณ ์์์ง๋ง
ํ์ด์ ์ค๊ณ๋ฅผ ์งํํ๋ค ๋ณด๋ ๋ฒ์๊ฐ ํ์ฅ๋์ด ์ฌ์ดํด2 ๋ด์ฉ๊น์ง ๋ฏธ๋ฆฌ ์ค๊ณํ๊ฒ ๋์๊ณ ,
๋ค๋ฆ๊ฒ ์ฌ์ดํด2 ์์ญ์ ์์ ์งํํ๊ณ ์์๋ค๋ ์ ์ ๊นจ๋ซ๊ฒ ๋์์ต๋๋ค.
๋ฆฌ๋ทฐ๋ฅผ ๋ฃ๊ณ ๋ณด๋ ๋ง์ ์ฃผ์ ๋ถ๋ถ์ ๋ํด์๋ ์์ํ๋ฉด์ ํ์ต์ ์ํด์ผ ๋ณด๋ค ๋ง์ ๊ฒ์ ๋ฐฐ์ธ ์ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์์ด์. ๋ค์ ๋ฏธ์ ๋ถํฐ๋ ์ค๊ณํ ๋ ์ฌ์ดํด ๋ด์ฉ์ ์ง์คํ๊ณ , ์ดํ ์๊ตฌ์ฌํญ ๋ณํ์ ๋ฐ๋ผ ์ค๊ณ๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ์์ผ๋ก ์งํํด๋ณด๊ฒ ์ต๋๋ค.
| this.pieces = new HashMap<>(pieces); | ||
| } | ||
|
|
||
| public List<Piece> getBlockingPieces(Route route) { |
There was a problem hiding this comment.
getBlockingPieces()๋ ์ธ๋ถ์ ๋ ธ์ถํ ์๋๊ฐ ์๋, Board ๋ด๋ถ์์ ์ด๋ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ ์ํ ๋ณด์กฐ ๋ฉ์๋๋ผ์, private์ผ๋ก ์์ ์ด ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
| .toList(); | ||
| } | ||
|
|
||
| public Optional<Piece> getDestinationPiece(Route route) { |
There was a problem hiding this comment.
getBlockingPieces()๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก private์ผ๋ก ์์ ์ด ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค ๐
| .orElseThrow(() -> new IllegalArgumentException("๋ณด๋์ ์๋ ๊ธฐ๋ฌผ์ ๋๋ค.")); | ||
|
|
||
| return piece.makeRoutes(currentPosition).stream() | ||
| .filter(route -> route.endPos().isInsideBoard()) |
There was a problem hiding this comment.
Position ๊ฐ์ฒด ์์ฒด๊ฐ ๋ณด๋ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฐ์ผ๋ก๋ ์์ฑ์ด ๋ถ๊ฐํ๋ค์! isInsideBoard() ๋ ํ์ฌ ์ฌ๊ธฐ์ ๋ฌด์๋ฏธํ ๋ฉ์๋๋ก ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
ํ์ฌ Position์ ์์ฑ ์์ ์ ์ด๋ฏธ ๋ณด๋ ๋ฒ์๋ฅผ ๊ฒ์ฆํ๊ณ ์์ด์, ์ ์์ ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด์ ๋ํด isInsideBoard()๋ฅผ ๋ค์ ํ์ธํ๋ ์๋ฏธ๊ฐ ์๋๊ฒ ๋ง๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฒ์์๋ ์ขํ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฌ์ฉ ์์ ์๋ ํ ๋ฒ ๋ ํ๊ณ ์ ํ์๋๋ฐ, ์ง๊ธ ๊ตฌ์กฐ์์๋ ์์ฑ ๋ถ๋ณ์์ผ๋ก ์ด๋ฏธ ๋ณด์ฅ๋๊ณ ์์ด์ ํด๋น ์ฝ๋๋ ์์ ํด๋๊ฒ ์ต๋๋ค.
| class ์ฐจ๋จ๊ฒ์ฌ { | ||
| @Test | ||
| public void ๋ง๋_์ฅ์ ๋ฌผ์ด_์์ผ๋ฉด_์ง๋๊ฐ์_์๋ค(){ | ||
| MoveStrategy moveStrategy = new PawnMoveStrategy(); |
There was a problem hiding this comment.
strategy ํ์ธํด์ฃผ์ธ์ (๋ค๋ฅธ ํ ์คํธ์ฝ๋๋ค๋)
There was a problem hiding this comment.
ํ ์คํธ ์ด๋ฆ๊ณผ ์ค์ ๋ก ์์ฑํ strategy๊ฐ ์ผ์นํ์ง ์๋ ๋ถ๋ถ์ด ์์๋ค์. ๊ฐ ํ ์คํธ๊ฐ ๊ฒ์ฆํ๋ ค๋ ๊ธฐ๋ฌผ๊ณผ ์ฌ์ฉํ strategy๊ฐ ๋ง๋์ง ์ ์ฒด์ ์ผ๋ก ๋ค์ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค
| import org.junit.jupiter.api.Test; | ||
|
|
||
| public class MoveStrategyTest { | ||
|
|
There was a problem hiding this comment.
default ๋ฉ์๋ ํ ์คํธ ์ถ๊ฐํด์ฃผ์ธ์
yenawee
left a comment
There was a problem hiding this comment.
์๋
ํ์ธ์ ๋ฃจ๋!
์ฅ๊ธฐ ๋ฏธ์
์ผ๋ก ๋ง๋๊ฒ ๋์ด์ ๋ฐ๊ฐ์ต๋๋ค.
- Getter ์ง์ (๊ฐ์ฒด๊ฐ ์ฑ ์ ๋ถ๋ฐฐ ์ฌ๊ณ ๋ ค)
- ํ ์คํธ ์ฝ๋ ์ค๋ฅ ํ์ธ ๋ฐ ์๋๋ฆฌ์ค ์ถ๊ฐ
์ค์ ์ผ๋ก ํผ๋๋ฐฑ ๋ฐ์ ๋จผ์ ํด์ฃผ์ธ์ ๐
โ๊ตฌํ ์ฐ์ โ ๋ฆฌํฉํ ๋งโ ๋ฐฉ์์ ๋ํ ์๊ฒฌ
์ค๋ฌด์์๋ ์๋ฒฝํ ์ค๊ณ๋ณด๋ค ๊ณ ๊ฐ์๊ฒ ๊ฐ์น๋ฅผ ์ ๋ฌํ๋ ๋น ๋ฅธ ๋ฐฐํฌ๊ฐ ์ค์ํ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๊ณ ์๊ฐํด์. 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 ์ด๋ { |
There was a problem hiding this comment.
์์ธ ์ผ์ด์ค ์๋๋ฆฌ์ค๋ ์ถ๊ฐํด์ฃผ์ธ์

์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
์๋ฌธ
์๋ ํ์ธ์ ์ ๋! ๋ฆฌ๋ทฐ ์์ฒญ์ ์ง๊ฐํด๋ฒ๋ฆฐ ๋ฃจ๋์ ๋๋ค ๐ฅฒ
์ ๋ ์ด๋ฒ ๋ฏธ์ ์์ ์๊ตฌ์ฌํญ ์ถฉ์กฑ๊ณผ ๊ฐ์ฒด์งํฅ ์์น, ๊ทธ๋ฆฌ๊ณ ์ต๊ทผ ํ์ตํ ๋ด์ฉ์ ํจ๊ป ์ ์ฉํ๋ ค๊ณ ์๋ํ์ต๋๋ค.
๋ค๋ง ์งํ ๊ณผ์ ์์ ์ค๊ณ์ ๊ตฌํ ์๋๊ฐ ํฌ๊ฒ ๋๋ ค์ก๊ณ ,
์ค๊ฐ๋ถํฐ๋ ์ฐ์ ๋์ํ๋ ์ฝ๋๋ฅผ ๋ง๋๋ ๊ฒ์ ์ง์คํ ๋ค ๋ฆฌํฉํ ๋ง์ผ๋ก ๋ณด์ํ๋ ๋ฐฉ์์ผ๋ก ๋ฐฉํฅ์ ์ ํํ์ต๋๋ค.
์ด ๊ณผ์ ์์ ๋ช ๊ฐ์ง ๊ณ ๋ฏผ์ด ์๊ฒจ ์๊ฒฌ์ ์ฌ์ญ๊ณ ์ถ์ต๋๋ค.
์ค๊ณ์์ ์ค์ ์ ์ผ๋ก ๋ณธ ๋ถ๋ถ
1. Board๋ฅผ ๋จ์ผ ์ํ ์ ์ฅ์์ฒ๋ผ ๋์์ต๋๋ค
๊ธฐ๋ฌผ์ ์์น ์ํ๋ฅผ
Board๋ง ๊ด๋ฆฌํ๋๋ก ๋๊ณ , ๋ค๋ฅธ ๊ฐ์ฒด๋ ํ์ฌ ํ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก๋ง ํ๋ ฅํ๋๋ก ์ค๊ณํ์ต๋๋ค.๊ธฐ๋ฌผ ์์ฒด๊ฐ ์์ ์ ์์น๋ฅผ ๋ค๊ณ ์๊ฒ ํ๋ฉด ์ํ ๋๊ธฐํ๊ฐ ์ด๋ ค์์ง ์ ์๋ค๊ณ ํ๋จํด, ์์น ์ํ๋
Boardํ ๊ณณ์์๋ง ๊ด๋ฆฌํ๋๋ก ๋์์ต๋๋ค.2. ์ด๋ ๊ท์น ์ ์์ ์ค์ ํ์ ์ ๋ถ๋ฆฌํ๋ ค๊ณ ํ์ต๋๋ค
๊ธฐ๋ฌผ๋ณ ์ด๋ ๊ท์น์
MoveStrategy๊ฐ ๋ง๋ค๊ณ , ์ค์ ์ด๋ ๊ฐ๋ฅ ์ฌ๋ถ๋ ํ์ฌ ์ฅ๊ธฐํ ์ํ์ ํจ๊ป ํ๋จํ๋๋ก ๊ตฌ์ฑํ์ต๋๋ค.์ด ๊ณผ์ ์์
MovePath๋ ๊ท์น ํ ํ๋ฆฟ,Route๋ ์ค์ ์ขํ๊ฐ ๊ณ์ฐ๋ ๊ฒฝ๋ก๋ก ์ญํ ์ ๋๋์์ต๋๋ค.3.
Position์ ์ ์ ํฉํ ๋ฆฌ์ ์บ์๋ฅผ ์ฌ์ฉํ์ต๋๋ค์ด์ ๋ฏธ์ ๋ฆฌ๋ทฐ์์ ๋จ์ ๊ฐ๋ ์ฑ๊ณผ ํธ์๋ฅผ ์ํด ์ ์ฉํ๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋์ ๋ํด ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ณ ,
์์ฑ์ ์์ฑ ๋ฐฉ์์ผ๋ก ์์ ํ๋ ๊ฒฝํ์ด ์์ต๋๋ค.
์ด๋ฒ์๋ ํด๋น ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋์ ์ด์ ์ ์ฒดํฌํ๊ณ
๋์ผ ์ขํ๋ฅผ ๋ฐ๋ณตํด์ ๋ง๋ค์ง ์๋๋ก ์บ์ฑ์ ์ ์ฉํ๊ณ , ์์ฑ ๊ฒฝ๋ก๋ฅผ ์ ํํ๊ธฐ ์ํด ๋์ ํด๋ณด์์ต๋๋ค.
๋ฆฌ๋ทฐ ๋ฐ๊ณ ์ถ์ ๋ถ๋ถ
1. โ๊ตฌํ ์ฐ์ โ ๋ฆฌํฉํ ๋งโ ๋ฐฉ์์ ๋ํ ์๊ฒฌ
์ฒ์๋ถํฐ ์์ง ์ต์ํ์ง ์์ ์์น(์๊ตฌ์ฌํญ, TDD, ์บก์ํ, ๊ฐ์ฒด์งํฅ ์์น)์ ๋ชจ๋ ์งํค๋ฉฐ ๊ตฌํํ๋ ค๋ค ๋ณด๋, ์ค๊ณ์ ์ฝ๋ ์์ฑ ์๋๊ฐ ๋งค์ฐ ๋๋ ค์ก์ต๋๋ค.
์ฌ์ดํด1 ๊ธฐ๊ฐ ๋์ ์์ฑ์ด ๋ถ๊ฐ๋ฅ ํ ๊ฒ ๊ฐ๋ค๋ ํ๋จ์ด ๋ค์ด ๋ฏธ์ ์ค๊ฐ๋ถํฐ๋ ์ฐ์ ๋์ํ๋ ์ฝ๋๋ฅผ ๋ง๋ ๋ค ๋ฆฌํฉํ ๋งํ๋ ๋ฐฉ์์ผ๋ก ์ ํํ์ต๋๋ค.
ํ์ง๋ง ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ด๋ ๊ฒ ๊ธฐ๋ฅ ๊ตฌํ์ ๋๋ด๊ณ ๋์ ๋ฆฌํฉํ ๋ง ํฌ์ธํธ๋ฅผ ๋์น์ง ์์ ์ ์์ ์ง์ ๋ํด ๊ณ์ ๋ถ์๊ฐ์ ๋๊ผ์ต๋๋ค. ์ข์ ์ฝ๋๋ฅผ ์ํด, ์ด์์ ์ธ ๊ฐ์ฒด์งํฅ์ ์ํด ๊ณ ๋ คํด์ผ ํ ์์๋ค์ ์ ์ฉํด๋ณด๊ณ ์ตํ๋ ๊ฒ์ ๋ชฉํ๋ก ๋ฏธ์ ์ ์ํ์ผ๋ ํ์ค์ ์ธ ์ ์ถ ๊ธฐ๊ฐ์ ๋ง์ถฐ ํํ์ ํ๊ณ '์ด๋ ๊ฒ ํ๋ฉด ์๋ ๊ฒ ๊ฐ์๋ฐ' ๋ผ๋ ์๊ฐ์ด ๋๋ ์ฝ๋๋ฅผ ๊ณ์ ์์ฑํด์ผ ํ๋ ์ํฉ์ด ๋ถํธํ๊ฒ ๋๊ปด์ก๋ ๊ฒ ๊ฐ์์.
์ค๋ฌด์์๋ ์ด๋ฐ ์์ผ๋ก ์ผ๋ถ ์์น์ ํฌ๊ธฐํ๊ณ ๊ตฌํ์ ์ฐ์ ํ๋ ์ํฉ์ด ์์ฃผ ์๋์ง, ์๋ค๋ฉด ์ด๋ฐ ์ํฉ์์ ์ด๋ค ๊ธฐ์ค์ผ๋ก ํ๋จํ๊ณ , ์ดํ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋์ง ์ด ๋ฐฉ์์ด ํ์ต ๋จ๊ณ์์๋ ์ ์ ํ ์ ๊ทผ์ธ์ง ์ ๋์ ์๊ฒฌ์ด ๊ถ๊ธํฉ๋๋ค.
2. Board, Piece, MoveStrategy์ ์ฑ ์ ๋ถ๋ฐฐ๊ฐ ์์ฐ์ค๋ฌ์ด์ง
ํ์ฌ๋ ์๋์ฒ๋ผ ์ญํ ์ ๋๋ด์ต๋๋ค.
Board: ํ์ฌ ์ฅ๊ธฐํ ์ํ ๊ด๋ฆฌ, ์ค์ ์ด๋ ๋ฐ์Piece: ์์ ์ ์ด๋ ์ ๋ต ๋ณด์MoveStrategy: ์ด๋ ๊ฐ๋ฅํ ๊ฒฝ๋ก ์์ฑ, ๊ท์น ํ์ ๋ค๋ง ์ด ๊ณผ์ ์์
Board๊ฐ ์ํ ์กฐํ๋ฅผ ๋ง์ด ์ ๊ณตํ๊ฒ ๋์๊ณ , ์ด๊ฒ์ดTell, Don't Ask๋ ์บก์ํ ๊ด์ ์์ ๋ถ์ ์ ํ๋ค๊ณ ํ๋จ๋์์ง๋ง ์ด๋ป๊ฒ ๊ฐ์ ํ ์ ์์์ง ์ข์ ๋ฐฉ์์ ๋ ์ฌ๋ฆฌ์ง ๋ชปํด ํ์ฌ์ ๊ตฌ์กฐ๋ก ์งํํ๊ฒ ๋์์ต๋๋ค.3.
Board๋ฅผ ์ค์ฌ์ผ๋ก ์ํ๋ฅผ ๋ชจ์ ๊ตฌ์กฐ๊ฐ ์ ์ ํ์ง์ํ๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋ฉด ๋๊ธฐํ ๋ฌธ์ ๋ ์ค์ด๋ค์ง๋ง, ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ด
Board์ ๋ง์ด ์ง์ํ๋ ๊ตฌ์กฐ๊ฐ ๋ฉ๋๋ค.์ด๋ฐ ๋ฐฉ์์ด ํ์ฉ ๊ฐ๋ฅํ ์ ํ์ธ์ง, ์๋๋ฉด ๋ฉ์์ง ์ค์ฌ์ผ๋ก ๋ ๋์ ๊ตฌ์กฐ๊ฐ ๊ฐ๋ฅํ์ง ํผ๋๋ฐฑ ๋ถํ๋๋ฆฝ๋๋ค.
4. ์ ์ ํฉํ ๋ฆฌ ๋์ ์ด ํ๋นํ๋์ง
ํนํ
Position์์ ์ ์ ํฉํ ๋ฆฌ์ ์บ์๋ฅผ ์ฌ์ฉํ ์ ํ์ด ์ ์ ํ๋์ง ๊ถ๊ธํฉ๋๋ค.๋จ์ ํธ์์ฑ ์์ค์ธ์ง, ์์ฑ ์ ์ด์ ์ฌ์ฌ์ฉ ์ด์ ์ ์ค์ ๋ก ์ ์ด๋ฆฐ ์ผ์ด์ค์ธ์ง ์๊ฒฌ ๋ถํ๋๋ฆฝ๋๋ค.
5. ์ธํฐํ์ด์ค
default๋ฉ์๋ ํ์ฉ์ด ์ ์ ํ๋์ง๊ณตํต ์ฝ๋๋ฅผ ์ค์ด๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์,
MoveStrategy์์ ๊ณตํต ๊ฒฝ๋ก ์์ฑ ๋ก์ง์default๋ฉ์๋๋ก ๋์์ต๋๋ค.์ธํฐํ์ด์ค๋ฅผ ์ ๊ทน์ ์ผ๋ก ๋์ ํ๋ ๊ฒ์ ์ฒ์์ด๋ผ ์ด ๋ฐฉ์์ด ์ข์ ์ถ์ํ์ธ์ง, ์๋๋ฉด ์ถ์ ํด๋์ค ์ชฝ์ด ๋ ์ ์ ํ๋์ง ๊ธฐ์ค์ ์๊ณ ์ถ์ต๋๋ค.