[๐ ์ฌ์ดํด1 - ๋ฏธ์ (๋ณด๋ ์ด๊ธฐํ + ๊ธฐ๋ฌผ ์ด๋)] ๋ชจ์ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#259
[๐ ์ฌ์ดํด1 - ๋ฏธ์
(๋ณด๋ ์ด๊ธฐํ + ๊ธฐ๋ฌผ ์ด๋)] ๋ชจ์ ๋ฏธ์
์ ์ถํฉ๋๋ค.#259picetea44 wants to merge 55 commits intowoowacourse:picetea44from
Conversation
pci2676
left a comment
There was a problem hiding this comment.
์๋ ํ์ธ์. ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ๋ฌ์๋์์ผ๋ ํ์ธํด์ฃผ์ธ์.
์กฐ๊ธ ๋ ๊ฐ์ ํด๋ณด๋ฉด ์ข์ ๋ถ๋ถ์ ๋ฆฌ๋ทฐ๋ฅผ ๋จ๊ฒจ๋์์ผ๋ ๊ฐ์ด ํ์ธํด์ฃผ์ธ์.
| this.pieces = new HashMap<>(pieces); | ||
| } | ||
|
|
||
| public void move(Position src, Position dest) { |
There was a problem hiding this comment.
pieces.get(src)๊ฐ null์ ๋ฐํํ ์ ์๋๋ฐ์, ๋ณด๋์ ๋ฑ๋ก๋์ง ์์ ์์น์์ ์ด๋์ ์๋ํ๋ฉด ๋ฐ๋ก ๋ค์ ์ค validateCanMove์์ piece.canMove()๋ฅผ ํธ์ถํ ๋ NullPointerException์ด ๋ฐ์ํฉ๋๋ค. pieceAt() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ ๊น์?
There was a problem hiding this comment.
ํ์คํ get()์ ์ง์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋ถํ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ง์ํด์ฃผ์ ๊ฒ์ฒ๋ผ, ๋ณด๋์ ์๋ ์์น์์ null์ด ๋ฐํ๋ ์ ์๊ณ , ๊ทธ ์ํ๋ก canMove()๋ฅผ ํธ์ถํ๋ฉด์ ์์ธ๊ฐ ๋ฐ์๋ ์ฌ์ง๊ฐ ์๋๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด EmptyPiece๋ฅผ ๋ง๋ค์ด๋์๋๋ฐ, ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ ๋ถ๋ถ ๊ฐ๋ค์.
pieceAt()์ ์ฌ์ฉํ๋ ๋ฐฉํฅ์ผ๋ก ์์ ํ๋ ๊ฒ์ด ๋ ์์ ํ๊ณ ์๋์๋ ๋ง๋ ์ค๊ณ๊ฐ์ต๋๋ค. ์ข์ ์ง์ ๊ฐ์ฌํฉ๋๋ค!
| return team.forwardRowDirection(); | ||
| } | ||
|
|
||
| public abstract List<Position> searchRoute(Position source, Position target); |
There was a problem hiding this comment.
Q1. searchRoute์ ์์น์ ํ์ ์บ์คํ
EmptyPiece๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ํ์๊ฐ ์๊ธฐ์ searchRoute ๋ฉ์๋๋ฅผ Piece ์ธํฐํ์ด์ค๊ฐ ์๋ ActivePiece ์ถ์ ํด๋์ค์ ๋ฐฐ์นํ์ต๋๋ค. ์ด๋ก ์ธํด Board์์ ((ActivePiece) piece).searchRoute(src, dest)์ ๊ฐ์ ๋ค์ด์บ์คํ ์ด ๋ฐ์ํ๊ณ ์์ต๋๋ค.
๋น ๊ณต๊ฐ์ด ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง ํ์๊ฐ ์๋ค๋ ๋ ผ๋ฆฌ๋ ์ ํจํ์ง๋ง, ์คํ ์์ ์ ์บ์คํ ์ด ์ค๊ณ์ ์ํํ ๊ฒ ๊ฐ์ต๋๋ค. Piece์ ๊ธฐ๋ณธ ๋ฉ์๋๋ก ๋ ๋ค์ EmptyPiece์์๋ ๋น ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๊ฒ ๋๋ ๊ฒ์ด ๋์๊น์, ์๋๋ฉด ํ์ฌ์ฒ๋ผ ํ์ ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ๋์๊น์?
์ด์ผ๊ธฐํ์ ๋๋ก ๋ค์ด์บ์คํ ์ ๋ฐํ์์ ํ๋๊ฒ์ ๊ทธ๋ฆฌ ์ข์ ๋ฐฉํฅ์ผ๋ก ๋ณด์ด์ง๋ ์์์. EmptyPiece์์๋ ๋น๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋๋ก ํ๋๊ฒ ์ข์๊ฒ ๊ฐ๋ค์.
There was a problem hiding this comment.
๊ทธ๋ฆฌ๊ณ EmptyPiece์์ ๋น ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋ ๊ฒ "์๋ฏธ ์๋ ๊ตฌํ"์ฒ๋ผ ๋๊ปด์ง์ค ์ ์์ง๋ง, Board ์ canMove()์์ ์ด๋ฏธ false๋ฅผ ๋ฐํํ๊ณ ์์ผ๋ searchRoute๊น์ง ๋๋ฌํ์ง์์๊ฒ ๊ฐ๋ค์. ๊ทธ๋ ๋ค๋ฉด EmptyPiece์ searchRoute๊ฐ ์ค์ ๋ก ํธ์ถ๋ ์ผ๋ ์์ด๋ณด์ฌ์.
There was a problem hiding this comment.
๋ง์ํด์ฃผ์ โ์๋ฏธ ์๋ ๊ตฌํโ์ ๋ํด ๋ง์ด ๊ณ ๋ฏผํ๊ณ ์์๋๋ฐ, ์ด ๋ถ๋ถ์ ์ง์ด์ฃผ์ ์ ๋ค์ ํ ๋ฒ ์๊ฐํด๋ณด๊ฒ ๋์์ต๋๋ค. ํนํ ์ด๊ฑธ ์ค๊ณ๋ก ์ด๋ป๊ฒ ํ์ด๋ด์ผ ํ ์ง ๊ณ ๋ฏผ์ด ๋ง์์ง๋ฉด์ ๋ฐฉํฅ์ ์ก๋ ๋ฐ ์ด๋ ค์์ ๋๊ผ์ต๋๋ค.
๋น๋ฐฅ์ด ๋ง์ํด์ฃผ์ ๊ฒ์ฒ๋ผ EmptyPiece์ searchRoute()๋ ์ค์ ๋ก ํธ์ถ๋์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ์ดํดํ์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ฐ ๊ฒฝ์ฐ์๋ โ์๋ฏธ ์๋ ๊ตฌํโ์ ๋ํ ๊ฒฝ๊ณ๋ฅผ ์ด๋ ์ ๋๊น์ง ์ ์ง? ๋๋ ์ด๋ ์ ๋๊น์ง๋ ํ์ฉ ๊ฐ๋ฅํ ์์ค์ธ์ง ๊ณ ๋ฏผ์ด ๋ฉ๋๋ค. ํธ์ถ๋์ง ์๋๋ค๋ ์ ์ ๊ฐ ์๋ค๋ฉด, ํด๋น ๊ตฌํ์ ๋๋ ๊ฒ์ ๋ํด ์ด๋ ์ ๋ ์ ์ฐํ๊ฒ ์๊ฐํด๋ ๊ด์ฐฎ์์ง ์ฌ์ญค๋ณด๊ณ ์ถ์ต๋๋ค.
๋ํ ๋ค์ด์บ์คํ ์ ์ค์ด๊ธฐ ์ํด ์ผ๋ถ ๋ฉ์๋๋ฅผ ์์ ํ์ ์ผ๋ก ๋์ด์ฌ๋ฆฌ๋ ๋ฆฌํฉํ ๋ง์ ์งํํ์ต๋๋ค. ๊ทธ ๊ณผ์ ์์ ์๋์ ๊ฐ์ด instanceof๋ฅผ ํ์ฉํ ๊ตฌํ์ ์ถ๊ฐํ๊ฒ ๋์์ต๋๋ค.
public boolean isAlly(Piece other) {
return other instanceof ActivePiece activePiece && this.team == activePiece.team;
}
์ด ๋ถ๋ถ์ other๊ฐ ์ค์ ๊ธฐ๋ฌผ์ธ์ง(= ActivePiece์ธ์ง)๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์๋๋ก ์์ฑํ์ต๋๋ค. instanceof๊ฐ ๋คํ์ฑ์ ํด์น ์ ์๋ ๊ฒฝ์ฐ์๋ ์ง์ํด์ผ ํ๋ค๊ณ ์๊ณ ์๋๋ฐ, ํ์ฌ์ ๊ฐ์ ์ํฉ์์๋ ๊ทธ ์ฌ์ฉ์ด ํฌ๊ฒ ๋ฌธ์ ๋์ง ์๋๋ค๊ณ ํ๋จํ์ต๋๋ค.
๋น๋ฐฅ์ ์ด ๋ถ๋ถ์ ๋ํด ์ด๋ป๊ฒ ๋ณด์๋์ง ์๊ฒฌ์ ๋ค์ด๋ณด๊ณ ์ถ์ต๋๋ค.
There was a problem hiding this comment.
์๋ฏธ์๋ ๊ตฌํ ์ฒ๋ผ ๋๊ปด์ก์ ๋ฟ์ด์ง ์ ๋ ์ต์ํ์ ๋ฐฉ์ด๋ก์ง์ด๋ผ๊ณ ํ๋จํ๋๊ฒ ๊ฐ์ต๋๋ค. ์ค์ ๋ก ์์ ์๋ฏธ์๋ ๊ตฌํ์ด๋ผ ํ๋จ๋๋ค๋ฉด ๊ตฌํํ์ง ์๋๊ฒ ๊ฐ์ฅ ์ข๊ฒ ์ฃ ? ์ค๊ณ์ ๋ฐฉํฅ์ ๋ฐ๊พธ๊ฑฐ๋์.
instanceof๋ ์ง์ํด์ฃผ์ธ์. ๋ฉ์ธ์ง๋ฅผ ๋์ง๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ํด๋ณด์๋ฉด ์ข์๊ฒ ๊ฐ์ต๋๋ค. ์์๋ค์ํผ ์ถ์ํ๋ฅผ ํด๋์๋๋ฐ ์ถ์ํ๋ฅผ ๊นจ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ๊ณผ ๋ค๋ฆ์ด ์์ผ๋๊น์.
์ฌ์ค ์ค๊ณ์ ๋ฐฉํฅ์ด ์ด ์ํฉ์ ๋ฐ์์์ผฐ๋ค๊ณ ๋ณผ ์ ์์๊ฒ ๊ฐ์๋ฐ์. EmptyPiece ๊ฐ ์์๋ค๋ฉด ์ด๋ ๊ฒ instanceof๋ฅผ ํตํด ํด๋์ค ํ์
์ ํ์ธํ์ง ์์๋ ๋์๊ฒ ๊ฐ๋ค์.
์ ๋ ์ธ๊ฐ์ง ๋ฐฉ๋ฒ์ด ๋ ์ค๋ฅด๋๋ฐ
EmptyPiece์ ๊ฑฐ- ๋ฉ์๋๋ฅผ
Piece๋ก ์ฌ๋ฆฌ๊ณTeam์EmptyPiece๋ฅผ ์ํ ๊ฐ๋ ์ถ๊ฐ - ๋ณ๋์
Team๊ตฌ๋ถ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณisAlly์์ ํธ์ถํ๊ธฐ
2๋ฒ ๋ฐฉ๋ฒ์ Team์ ์๋ก์ด ๊ฐ๋
์ ์ถ๊ฐํ๋๊ฒ EmptyPiece์ ์ํด Team์ ๊ตฌ์กฐ๊ฐ ํ๋ค๋ฆฌ๋๊ฒ ๊ฐ์ ๋ดํค์ง ์๊ณ
3๋ฒ ๋ฐฉ๋ฒ์ ๋ฉ์๋ ํธ์ถ์ด ๊ผฌ๋ฆฌ ๋ฌผ๊ณ ๊น๊ฒ ๋ค์ด๊ฐ์ ๊ฐ๋ ์ฑ์ด ๊ทธ๋ฆฌ ์ข์ง ์์ ๋ดํค์ง ์๋๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋์ ์ ๋ผ๋ฉด 1๋ฒ์ ๋ฐฉํฅ์ ํํ ๊ฒ ๊ฐ๋ค์
๋ชจ์๋ ๊ณ ๋ฏผํด๋ณด๊ณ ๋ ๋์๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ๊ตฌํํด๋ณด์ธ์ ๊ผญ ๋ฐ๋ผํ ํ์๋ ์์ต๋๋ค๋ง instanceof๋ ์ ๊ฑฐํด๋ณด์์ฃ
| String display(PieceAppearance colorizer); | ||
|
|
||
| default boolean isCannon() { | ||
| return false; |
There was a problem hiding this comment.
isCannon()์ด Piece ์ธํฐํ์ด์ค์ default ๋ฉ์๋๋ก ๋ค์ด๊ฐ ์๋๋ฐ์, ์ด๋ ๊ฒ ํ๋ฉด ํน์ ๊ตฌํ์ฒด๋ฅผ ์ธํฐํ์ด์ค ๋ ๋ฒจ์์ ์๊ณ ์๋ ์
์ด ๋ฉ๋๋ค. ๊ธฐ๋ฌผ ์ข
๋ฅ๊ฐ ๋์ด๋ ๋๋ง๋ค isXxx() ๋ฉ์๋๊ฐ ์ถ๊ฐ๋ ์ ์๋ ๊ตฌ์กฐ์ด๊ธฐ๋ ํ๊ณ ์.
๊ฒฝ๋ก ๊ฒ์ฆ ์ฑ ์์ ๊ธฐ๋ฌผ์๊ฒ ์์ํ๋ฉด, Board๊ฐ "์ด ๊ธฐ๋ฌผ์ด ํฌ์ธ์ง" ๋ฌผ์ด๋ณผ ํ์ ์์ฒด๊ฐ ์์ด์ง ์ ์์ต๋๋ค. ํ๋ฒ ๊ณ ๋ฏผํด๋ณด์๋ฉด ์ข๊ฒ ์ด์.
๊ทธ๋ฆฌ๊ณ default ๋ฉ์๋๋ ์๋ก์ด ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ ๋ ํ์ํธํ์ฑ์ ์งํค๊ธฐ ์ํจ์ด๋ ์ง๊ธ์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ์ผ๋ก ์๊ฐ๋์ง๋ ์๋๊ฒ ๊ฐ์์
There was a problem hiding this comment.
์ด๋ฒ์ ๊ธฐ๋ฌผ๋ก ๊ฒฝ๋ก ๊ฒ์ฆ ์ฑ ์์ ์ฎ๊ฒจ๋ดค์ต๋๋ค. ๊ฒ์ฆ ์ฑ ์์ด ๋ฐ๋๋ ํ์คํ isCannon() ์ ํ์์ฑ์ด ์์ด์ง๊ฒ ๋ณด์์ต๋๋ค.
๋ค๋ง ๊ตฌํ ๊ณผ์ ์์ instanceof๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๋๋ฐ ์ด๊ฒ ์ ์ ํ ์ฌ์ฉ๋ฒ ์ด์์๊น์?
์ ๊ฐ ์๊ฐํ instanceof์ ํ์ฉ ๊ฐ๋ฅํ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํฉ๋๋ค.
โ๋คํ์ฑ์ผ๋ก ํด์น ์ ์๋ ํ์์ธ๊ฐ?" ์๋๋ฉด "๋คํ์ฑ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์์คํ ์ , ๊ตฌ์กฐ์ ์ฒ๋ฆฌ๋ฅผ ์ํจ์ธ๊ฐ?โ
Cannon์ ๋ ์ด์ ํ์ฅ์ ์งํํ์ง ์๋ ๋ง๋จ ํด๋์ค๋ก ์ ๋ ์ ์ํ์๊ณ ์ด ๊ณผ์ ์์ ํฌ๊ฐ ํฌ๋ฅผ ์ธ์งํ๊ธฐ ์ํด instanceof๋ฅผ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.์ด ๋ถ๋ถ์ ๋คํ์ฑ์ ํด์น๋ ์ฌ์ฉ์ด๋ผ๊ธฐ๋ณด๋ค๋, ํ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ๋ถ์ด ํ์ํ ์ํฉ์ด๋ผ๊ณ ํ๋จํ์ต๋๋ค.
ํน์ ์ ๊ฐ ์๋ชป ํ๋จํ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ง์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
There was a problem hiding this comment.
ํฌ ๊ท์น๋๋ฌธ์ ์ด๋๋ก ์ฎ๊ฒจ๋ ๋น์ทํ ๋๋์ด ๋๊ธดํ๋ค์
ํน์ ํ์ ์ ๋ฌผ์ด๋ณด๋ ๋ฉ์๋๋ณด๋จ ํน์ ์ฑ ์์ ๋ฌผ์ด๋ณด๋ ๋ฉ์๋ ๋ค์ด๋ฐ์ผ๋ก ๋ณ๊ฒฝ๋งํ์ ๋ ๊ด์ฐฎ์๊ฒ ๊ฐ์ต๋๋ค.
๋ค์ด๋ฐ์ ํตํด ํ์ ์ ๋ฌป๋๊ฒ๊ณผ ์ฑ ์์ ๋ฌป๋๊ฒ์ ์ด๋ฆ๋ง ๋ฌ๋ผ๋ณด์ผ์ง์ธ์ ๊ทธ ๋ค์ด๋ฐ์ด ๊ฐ๊ณ ์๋ ์ํฅ๋ ฅ์ ๋ค๋ฅด๋ค๊ณ ์๊ฐํด์.
as-is: is{type}
to-be: can{action}
| 4, new YanggwimaFactory() | ||
| ); | ||
|
|
||
| public static AbstractBoardFactory from(int input) { |
There was a problem hiding this comment.
factories.get(input)์ด ์ ํจํ์ง ์์ ์ซ์(์: 5, 0)๊ฐ ๋ค์ด์ค๋ฉด null์ ๋ฐํํ๋๋ฐ์, ์ด null์ด ๊ทธ๋๋ก createFormation() ํธ์ถ ์์ ์ NullPointerException์ผ๋ก ํฐ์ง๊ฒ ๋ฉ๋๋ค. ์๋ชป๋ ์
๋ ฅ์ ๋ํด ์๋ฏธ ์๋ ์์ธ ๋ฉ์์ง๋ฅผ ์ค ์ ์๋๋ก ์ฌ๊ธฐ์ ๋ฐฉ์ดํด์ฃผ๋ ๊ฒ ์ข๊ฒ ์ด์.
There was a problem hiding this comment.
๋ฌธ์ ์ํฉ์ ์ ๋ฆฌํด๋ณด๋ฉด ์๋์ ๊ฐ์ด ์ดํดํ์ต๋๋ค.
์ฒ์์๋ InputView์์ ์ด๋ฏธ 1~4์ ๋ํ ๊ฒ์ฆ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๋๋ฉ์ธ์์ ์ด๋ฅผ ๋ค์ ๊ฒ์ฆํ๋ ๊ฒ์ด ์ค๋ณต์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
๋ค๋ง ๋ค์ ์๊ฐํด๋ณด๋ ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๋ค๊ณ ๋๊ผ์ต๋๋ค.
๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์๋ํ์ง ์์ ๊ฐ์ด ๋ค์ด์ฌ ์ ์๋ค๋ ์
๋๋ฉ์ธ์ด ์
๋ ฅ ํ์(์: 1,2,3,4)์ ์์กดํ๊ฒ ๋์ด, ์
๋ ฅ ์๊ตฌ์ฌํญ์ด ๋ฐ๋๋ฉด ๋๋ฉ์ธ๊น์ง ์์ ํด์ผ ํ๋ ๊ตฌ์กฐ๋ผ๋ ์
์ด ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํด๋ณด์์ต๋๋ค.
FormationType์ด๋ผ๋ enum์ ๋์
ํด์, ๋๋ฉ์ธ์์๋ ํด๋น ํ์
๋ง ๋ค๋ฃจ๋๋ก ์ ํํ์ต๋๋ค.
FormationConverter๋ผ๋ ๋ณ๋์ ํด๋์ค๋ฅผ ๋์ด, ์
๋ ฅ๊ฐ์ FormationType์ผ๋ก ๋ณํํ๋ ์ฑ
์์ ๋ถ๋ฆฌํ์ต๋๋ค. ์ด๋ฅผ ํตํด ์
๋ ฅ ํ์์ด ๋ฐ๋๋๋ผ๋ ํด๋น ๋ถ๋ถ๋ง ์์ ํ๋ฉด ๋๋๋ก ํ์ต๋๋ค.
๋ํ, ๋ช
์์ ์ผ๋ก null์ ๋ํ ์ฒ๋ฆฌ๋ ์ถ๊ฐํ์ต๋๋ค.
์ฌ๊ธฐ์ ๋ช ๊ฐ์ง ๊ณ ๋ฏผ์ด ์์ต๋๋ค.
์ด๋ฐ ์์ผ๋ก ๋ณ๋์ ๋ณํ(์ ํธ) ํด๋์ค๋ฅผ ๋๋ ๋ฐฉํฅ์ด ๊ด์ฐฎ์์ง
์ด ํด๋์ค์ ์์น๋ฅผ ์ด๋์ ๋๋ ๊ฒ ์ ์ ํ ์ง (์ปจํธ๋กค๋ฌ๊ฐ ๋ณํ ์ฑ
์์ ๊ฐ์ง๋ค๊ณ ๋ณด๊ณ controller์ ๋์ง, ์
๋ ฅ๊ณผ ๊ฐ๊น๋ค๊ณ ๋ณด๊ณ view์ ๋์ง)
๊ธฐ์กด์ InputView์์ ์ํํ๋ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ ๊ฒ์ด ๋ง๋์ง
์ด ๋ฐฉํฅ์ด ๊ด์ฐฎ์ ์ ๊ทผ์ธ์ง, ๊ทธ๋ฆฌ๊ณ ๋ ๋์ ์ค๊ณ ๋ฐฉํฅ์ด ์๋ค๋ฉด ๋น๋ฐฅ์ ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
There was a problem hiding this comment.
์ 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); |
There was a problem hiding this comment.
dx, dy๊ฐ ์ธ์คํด์ค ํ๋๋ก ์ ์ธ๋์ด ์์ด์ Elephant ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋๋ง๋ค ์๋ก์ด ๋ฆฌ์คํธ๊ฐ ๋ง๋ค์ด์ง๋๋ฐ์, ์ด ๊ฐ๋ค์ ๋ชจ๋ ์(่ฑก) ์ธ์คํด์ค์์ ๋์ผํ๋๊น static final๋ก ์ ์ธํ๋ฉด ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ์ ์ค์ผ ์ ์์ต๋๋ค. ์์์ ์ธ๊ธํ ๋ถ๋ถ๊ณผ ๊ฐ์๋ฐ์, Horse, General, Guard, Soldier์์๋ ๋์ผํ๊ฒ ๋ฐ๊ฒฌ๋ฉ๋๋ค.
There was a problem hiding this comment.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ๋ ์ถ์ฝํ์ง ๋ง์์ฃผ์ธ์ ์๋ง delta๊ฒ ์ฃ ?
There was a problem hiding this comment.
์ ์ ๋ง ๊ทธ๋ ๋ค์. ๋ฏธ์ฒ ์๊ฐํ์ง ๋ชปํ๋ ๋ถ๋ถ์ธ๋ฐ ์ง์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
๋ง์ํด์ฃผ์ ๊ฒ์ฒ๋ผ ์ด ๊ฐ๋ค์ ๋ชจ๋ ์ธ์คํด์ค์์ ๋์ผํ๊ฒ ์ฌ์ฉ๋๋ static final๋ก ์ ์ธํ๋ ๊ฒ์ด ๋ ์ ์ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ๋ ์ค์ผ ์ ์์ ๊ฒ ๊ฐ๊ณ ์.
๊ทธ๋ฆฌ๊ณ ๋ค์ด๋ฐ๋ dx, dy๋ณด๋ค๋ ์ผ๋ง๋ ๋จ์ด์ ธ ์๋๊ฐ์ offset์ด ๋ ์๋๋ฅผ ์ ๋๋ฌ๋ด๋ ๊ฒ ๊ฐ์์ ํจ๊ป ์์ ํด๋ณด์์ต๋๋ค.
| } | ||
|
|
||
| @Test | ||
| void ๊ฒฝ๊ณ๊ฐ_์ต๋_๋ฒ์์_์์น๋ฅผ_์์ฑํ๋ค() { |
There was a problem hiding this comment.
์์ธ ํ
์คํธ์์ isInstanceOf(IllegalArgumentException.class)๋ง ๊ฒ์ฆํ๊ณ ๋ฉ์์ง๋ฅผ ํ์ธํ์ง ์๊ณ ์๋๋ฐ์, Row์ Column ๋ชจ๋ IllegalArgumentException์ ๋์ง๊ธฐ ๋๋ฌธ์ ํ์ด ์๋ชป๋ ๊ฑด์ง ์ด์ด ์๋ชป๋ ๊ฑด์ง ์ด ํ
์คํธ๋ง์ผ๋ก๋ ๊ตฌ๋ถ์ด ์ ๋ฉ๋๋ค. hasMessage() ๋๋ hasMessageContaining()์ผ๋ก ์๋ํ ์์ธ ์ง์ ์ ํน์ ํด์ฃผ์๋ฉด ๋ ๊ฒฌ๊ณ ํ ํ
์คํธ๊ฐ ๋ ๊ฒ ๊ฐ์์.
There was a problem hiding this comment.
์๊ฐํด๋ณด์ง ๋ชปํ๋ ๋ถ๋ถ์ด์๋ค์. ํ์คํ ์ด๋ค ๋ถ๋ถ์ ์ํด์ ์ค๋ฅ๊ฐ ํฐ์ง๋์ง ๊ตฌ๋ถ์ด ์๋์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์กฐ์ธ ๋๋ฌด ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ํ์คํ ์ด๋ฐ ์ํฉ์ด ๊ฑฐ์ง ์์ฑ์ ํด๋นํ ์ ์๋ ๊ฒฝ์ฐ ์๊ตฐ์. ๋ง์ํด์ฃผ์ ๋๋ก ํน์ ์์ธ ์ํฉ์ ์ง์ ํ ์ ์๋ ์ ๋ณด๋ฅผ ํจ๊ป ํ ์คํธ์ ํฌํจ์ํฌ ์ ์๋๋ก ์ฐ์ตํด๋ณด๊ฒ ์ต๋๋ค!
| @Override | ||
| public List<Position> searchRoute(Position source, Position target) { | ||
| return List.of(); | ||
| } |
There was a problem hiding this comment.
Q2. ์๋ฏธ ์๋ ๋ฉ์๋ ๊ตฌํ
๊ธฐ๋ฌผ๋ง๋ค ์ด๋ ๋ฐฉ์์ด ๋ค๋ฅด๋ค ๋ณด๋, ์ด๋ค ๊ธฐ๋ฌผ์ ์ค๊ฐ ๊ฒฝ๋ก๊ฐ ํ์ํ๊ณ ์ด๋ค ๊ธฐ๋ฌผ์ ์์ ํ์๊ฐ ์๋๋ฐ, ๊ณตํต ์ธํฐํ์ด์ค๋ฅผ ๋ง์ถ๋ค ๋ณด๋ ์ค๊ฐ ๊ฒฝ๋ก๊ฐ ํ์ ์๋ ๊ธฐ๋ฌผ์์๋ List.of() ๊ฐ์ ๋น ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ฒ ๋์ต๋๋ค. ํ ์นธ๋ง ์ด๋ํ๋ ๊ธฐ๋ฌผ ์
์ฅ์์๋ ์ด ๋ฉ์๋ ์์ฒด๊ฐ ์๋ฏธ๊ฐ ์์ด์, ์ง๊ธ์ฒ๋ผ ๋น ๊ฐ์ ๋ฐํํ๋ ๋ฐฉ์์ด ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ ๋ฐ๋ ๋์์ด ๋์ง๋ง, ํํธ์ผ๋ก๋ ํน์ ๊ธฐ๋ฌผ์๊ฒ ๋ถํ์ํ ์ฑ
์์ ์ต์ง๋ก ๋ถ์ฌํ๋ ๋๋์ด ๋ญ๋๋ค. ๊ทธ๋์ ๊ณ ๋ฏผ๋๋ ๊ฑด, ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๋คํ์ฑ์ ์ ์งํ๋ ๊ฒ ๋ ๋์ ์ ํ์ธ์ง, ์๋๋ฉด ๊ธฐ๋ฌผ๋ณ๋ก ์ญํ ์ ์กฐ๊ธ ๋ ๋ช
ํํ๊ฒ ๋๋ ์ ์๋ฏธ ์๋ ๋ฉ์๋๋ ์์ ์ ๊ฑฐํ๋ ๋ฐฉํฅ์ด ๋์์ง์
๋๋ค. ๋น ๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋ ๊ตฌ์กฐ๊ฐ ๊ด์ฐฎ์ ์ค๊ณ์ธ์ง์ ๋ํด์ ์๊ฒฌ์ ํ๋ฒ ๋ฃ๊ณ ์ถ์ต๋๋ค.
์ฌ๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ ์ง๋ฌธ์ ์ฃผ์ ๊ฒ ๊ฐ๋ค์. ๊ทธ๋ฐ๋ฐ searchRoute๋ ์์ง์์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋๋ฐ ๊ธฐ๋ฌผ๋ค์ด src์์ dest๋ก ๊ฐ์ ์๋ ์ํฉ์ผ๋์๋ ๋น ๋ฆฌ์คํธ๋ฅผ ์๋ตํด์ผํ์ง ์๋์? ๋ฉ์๋์ ์ด๋ฆ๊ณผ ์ค์ ๋์์ด ์ ๋ ์ฝ๊ฐ ๊ฑฐ๋ฆฌ๊ฐ์ด ์๋๊ฒ ๊ฐ์๋ณด์ด๋ค์.
There was a problem hiding this comment.
๊ทธ๋ฆฌ๊ณ src, dest ์ถ์ฝํ์ง ๋ง์์ฃผ์ธ์
There was a problem hiding this comment.
๋ง๋ ๋ง์์ธ ๊ฒ ๊ฐ์ต๋๋ค. searchRoute()๋ ํญ์ canMove()๋ฅผ ๋จผ์ ํต๊ณผํ ์ ํจํ ๋์์ ๋ํด์๋ง ํธ์ถ๋๊ธฐ ๋๋ฌธ์, ๋จ์ํ โ๊ฒฝ๋ก๋ฅผ ํ์ํ๋คโ๊ธฐ๋ณด๋ค๋ โ์ ํจํ ์ ๋ ฅ์ ๋ํด ๊ณ์ฐ์ ์ํํ๋คโ๋ ์๋ฏธ๊ฐ ๋ ๊ฐ๊น๋ค๊ณ ๋๊ผ์ต๋๋ค.
๊ทธ๋์ ๋ฉ์๋ ์ด๋ฆ์ calculateRoute()๋ก ๋ณ๊ฒฝํด๋ณด์๋๋ฐ, ์ด๋ฐ ๋ฐฉํฅ์ ๋ค์ด๋ฐ์ด ์ ์ ํ์ง ๊ถ๊ธํฉ๋๋ค. ํน์ ์ ๊ฐ ์๋ชป ์ดํดํ๊ณ ์๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ง์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
There was a problem hiding this comment.
๊ฒฝ๋ก๋ฅผ ์ฐพ์์ ์๋ ค์ฃผ๋ ๋๋์ด๋ผ ์ง๊ธ๋ ๊ทธ๋ ๊ฒ ์ด์ํ๋ค๋ ๋๋์ ์๋๋ฐ์. ๊ตณ์ด ์ ๋ผ๋ฉด ๋ญ๋ผ๊ณ ์ง์์๊น ํ๋ฉด findRoute ์ ๋๊ฐ ๋ ์ค๋ฅด๋ค์ ๋ณ๋ฐ ์ฐจ์ด์์ฃ ? ใ
ใ
..
| public Turn next() { | ||
| if (current == Team.CHO) { | ||
| return new Turn(Team.HAN); | ||
| } | ||
| return new Turn(Team.CHO); | ||
| } |
There was a problem hiding this comment.
Q3. ๋ถ๋ณ ๊ฐ์ฒด์ Getter ์ฌ์ฉ
์ด๋ฒ ๋ฏธ์ ์์ getter๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ ์๊ตฌ์ฌํญ์ ์งํค๋ ค๊ณ ์ต๋ํ ๊ฐ์ฒด์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ์ ํด๋ดค์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ตฌํ์ ์งํํ๋ค ๋ณด๋ ์ํ๊ฐ ๋ณํ์ง ์๋ ๋ถ๋ณ ๊ฐ์ฒด์ ๊ฒฝ์ฐ์๋ getter๋ฅผ ์ง์ํ๋ ๊ฒ ๋ง๋์ง์ ๋ํ ๊ณ ๋ฏผ์ด ๋ค์์ต๋๋ค. ๋ด๋ถ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฐ์ฒด๋ผ๋ฉด, ๋จ์ํ ๊ฐ์ ์กฐํํ๋ getter๊ฐ ์บก์ํ๋ฅผ ํฌ๊ฒ ํด์น๋ ๊ฑด ์๋ ์๋ ์์ง ์์๊น ํ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
๋ํ ๋จ์ ์กฐํ ํ ๋ฒ์ด๋ฉด ํด๊ฒฐ๋ ๋ก์ง์, getter๋ฅผ ์ฐ์ง ์๊ธฐ ์ํด ๊ฐ์ฒด์ ์ญํ ์ ๋ถ์ฐ์ํค๋ค ๋ณด๋ ์คํ๋ ค ๋ฉ์๋๊ฐ ๋์ด๋๊ณ ๊ตฌํ์ด ๋ ๋ณต์กํด์ง๋ ๋๋๋ ๋ฐ์์ต๋๋ค. ๋ฐ๋ผ์ getter๋ฅผ ์ง์ํด์ผ ํ๋ ๋ช ํํ ์ด์ ๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ํ, ์ค์ ์ค๋ฌด์์๋ ๋๋ฉ์ธ ๋ชจ๋ธ์์ getter๋ฅผ ์ด๋ ์ ๋๋ก ์ ํํ๋์ง ๊ถ๊ธํฉ๋๋ค. ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ์ ํธ์์ฑ๊ณผ ์ด๋ ์ ๋ ํํํ๋ฉด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง, ํ์ ์์๋ ์ด๋ค ๊ธฐ์ค์ผ๋ก ๊ท ํ์ ์ก๋์ง๋ ๊ถ๊ธํฉ๋๋ค.
์ด ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์ด๋๋ค ๋ฌ์ง ๊ณ ๋ฏผํ๋ค๊ฐ ์ฌ๊ธฐ์ ๋ต๋ณ๋๋ฆด๊ฒ์. ์๋ง ๋ฌด๋ถ๋ณํ getter๋ฅผ ์ฌ์ฉํ๋๊ฒ์ ๋ง๊ธฐ ์ํด์ ์ผ๊ฒ ๊ฐ์๋ฐ์. ๊ฐ๋ น ๋๋ฏธํฐ ๋ฒ์น์ ์ด๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ๋ ์์๊ฒ ๊ฐ๋ค์.
์ผํ ๋ณด์์๋ ๋๋ถ๋ถ ์ ์ง์ผ์ฃผ์ ๊ฒ ๊ฐ๊ธดํ๋ฐ ์ง๊ธ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๋ง๊ธฐ ์ํจ์ผ๋ก ๋ณด์ฌ์. ์ง๋ฌธ์ผ๋ก ๋ฏธ๋ฃจ์ด ๋ณด์์ ๋ ์บก์ํ๋ฅผ ์งํค๊ธฐ ์ํจ์ด๋ผ๋๊ฒ์ ์ด๋ฏธ ์ถฉ๋ถํ ์ธ์งํ๊ณ ๊ณ์ ๊ฒ ๊ฐ๋ค์. ์ง๊ธ๊ณผ ๊ฐ์ด Turn์์ Team์ ๋ํ ๊ตฌํ ์์ธ๊ฐ ๋ ธ์ถ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ง์ผ๋ผ๋๊ฑฐ์ง ๋ฌด์กฐ๊ฑด getter๋ ์๋ผ ๋ ์๋๋ผ๊ณ ์๊ฐํด์.
์ค๋ฌด์์๋ getter๋ฅผ ์จ์ํ๋ ๊ฒฝ์ฐ๋ ๋ถ๋ช ์กด์ฌํ๊ตฌ์. ex. ์ง๋ ฌํ, ์ญ์ง๋ ฌํ๋ฅผ ์ํด์ ๋ฑ..
๊ฐ๋ น ์ง๊ธ ๋ฏธ์ ์ ๊ฒฝ์ฐ view๋ฅผ ์ํด์๋ผ๋ฉด getter๋ฉ์๋๊ฐ ๋์ฌ์ ๋ฐ์ ์์๊ฒ ๊ฐ์์
There was a problem hiding this comment.
์ํ ๋ต๋ณ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
view๋ฅผ ์ํด์ ์ฐ๋ ๋ถ๋ถ์ ๋ถ๊ฐํผํ ๊ฒฝ์ฐ๊ฐ ์์๊ตฐ์.
์ด๋ฒ์ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ณต๋ถํ๋ฉด์ DTO์ ๋ํด์๋ ์ญํ ์ ๋ค์ ๊ณต๋ถํด๋ดค์ต๋๋ค.
ํน์ DTO์ ๋ํ ๋์
์ ํ ์ํฉ์์ ์ด๋จ์ง ๊ถ๊ธํฉ๋๋ค. DTO๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํด์ ๋ฌด์กฐ๊ฑด getter๋ฅผ ์์ฐ๊ฒ ๋์ง ์์ ์ ์์ง๋ง, getter์ ์ฌ์ฉ์ ์ต๋ํ ์ค์ผ ์ ์๋ค๋ ์ , ๋ทฐ์๊ฒ ์ง์ ๋ชจ๋ธ์ ๋์ ธ์ฃผ๋ ๋ฐฉ์์ ๋๋นํด ๋ทฐ์ ๋ชจ๋ธ์ ์ฐ๊ฒฐ์ ๋์ ์ ์๋ค๋ ์ ๋ฑ ์ด์ ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
There was a problem hiding this comment.
๊ตณ์ด ์ง๊ธ ๋จ๊ณ์์๋ dto๋ผ๋ ๊ฐ๋ ์ ์ฐ์ค ํ์๋ ์์๊ฒ ๊ฐ์์.
์ง๊ธ์ ๋๋ฉ์ธ์์ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํ์ด์ ์ฝ๋๋ฅผ ๊ตฌํํ ์ง์ ๋ํด ์ง์คํ๋๊ฒ ๋ ์ข์๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณดํต dto๋ฅผ ๋ง๋ค์ด๋ ๋๋ฉ์ธ์ด dto๋ฅผ ์์กดํ์ง ์๊ณ dto๊ฐ ๋๋ฉ์ธ์ ์์กดํ๋๋ก ํ๊ธฐ ๋๋ฌธ์
๊ฐ ์ ๋ฌ์ ์ํ getter๋ ๋๋ถ๋ถ ์๊ฒจ๋๊ธฐ ๋ง๋ จ์ด๊ธดํด์. ๊ฐ ๊ฐ์ฒด๋ก ๋ชจ๋ ๊ฐ์ ์ ๋ฌํ ์ ์๋๊ฒ ์๋๋ผ๋ฉด์
| if (piece.isCannon()) { | ||
| validateCannonRoute(route, dest); | ||
| } else { | ||
| validateIntermediateRoute(route); | ||
| } |
There was a problem hiding this comment.
Q4. ๋ฐ์ฑ
ํ์ฌ Board๊ฐ ๋ชจ๋ ์์น ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค ๋ณด๋, ์ด๋ ๊ฒฝ๋ก์ ๋ํ ๊ฒ์ฆ๋ Board์์ ์ฒ๋ฆฌํ๋ ๊ฒ ๋ง๋ค๊ณ ์๊ฐํด์ ๊ตฌํํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ ๊ณผ์ ์์ ํฌ์ ์ด๋ ๊ท์น(ํฌ๋ ํฌ๋ฅผ ๋์ง ๋ชปํ๋ค, ๋ฐ๋์ ํ๋์ ๊ธฐ๋ฌผ์ ๋์ด์ผ ํ๋ค ๋ฑ)๊น์ง Board๊ฐ ์ง์ ์๊ณ ์ฒ๋ฆฌํ๊ฒ ๋์ต๋๋ค. ์ด๋ ๊ฒ ๋๋ค ๋ณด๋ Board๊ฐ ๋จ์ํ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ๋์ด์, ๊ฐ ๊ธฐ๋ฌผ์ ์ธ๋ถ ๊ท์น๊น์ง ์๊ฒ ๋๋ ๊ตฌ์กฐ๊ฐ ๋ ๊ฒ ๊ฐ์ ์์ฌ์์ด ๋จ์ต๋๋ค. ์๊ฐ ๊ด๊ณ์ ์ด๋ฒ ๋จ๊ณ์์๋ ์ถฉ๋ถํ ๊ฐ์ ํ์ง ๋ชปํ๋๋ฐ, ์ด ๋ถ๋ถ์ ๋ค์ ์ฌ์ดํด์์ ์ญํ ์ ๋ ์ ๋ถ๋ฆฌํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ํด๋ณด๊ณ ์ถ์ต๋๋ค. ํน์ ์ด๋ฐ ์ํฉ์์ ์ฑ ์์ ์ด๋ป๊ฒ ๋๋๋ ๊ฒ ์ข์์ง์ ๋ํด์๋ ์กฐ์ธ์ ๋ถํ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค..!
์ด ๋ถ๋ถ์ด๊ฒ ์ฃ ? ์ ๋ ์ด๋ฒ๋จ๊ณ์์ ๊ณ ์น๊ณ ๋์ด๊ฐ๋ฉด ์ข์๊ฒ ๊ฐ์๋ฐ์ใ
ใ
.. ์ง๊ธ move์์ validateํ๋ ๋๋ถ๋ถ์ ๊ฒ๋ค์ด ๊ฐ piece ๊ตฌํ์ฒด ๋ด๋ถ๋ก ๊ฐ๋ ค์ง๋๋ก ํด๋ณด๋ฉด ์ด๋จ๊น์.
์์๊ฒ ์ง๋ง move ๋ฉ์๋๊ฐ ํฌ์ธ์ง ์๋์ง๋ฅผ if-else๋ก ๋ถ๊ธฐํ๊ณ ์์ต๋๋ค. ์๋ก์ด ํน์ ์ด๋ ๊ท์น์ ๊ฐ์ง ๊ธฐ๋ฌผ์ด ์ถ๊ฐ๋๋ฉด ์ด ๋ถ๊ธฐ๊ฐ ๊ณ์ ๋์ด๋๊ฒ ์ฃ ?
"๊ฒฝ๋ก์ ์๋ ๊ธฐ๋ฌผ๋ค์ ๊ฒ์ฆํ๋ ์ฑ ์"์ ๊ฐ ๊ธฐ๋ฌผ์ด ์ค์ค๋ก ๊ฐ์ง๊ฒ ํ๋ฉด ์ด๋จ๊น์? ์๋ฅผ ๋ค์ด ๊ธฐ๋ฌผ์๊ฒ ๊ฒฝ๋ก์์ ๊ธฐ๋ฌผ ๋ชฉ๋ก์ ์ ๋ฌํ๊ณ , ์๊ธฐ ๊ท์น์ ๋ง๋์ง ์ค์ค๋ก ํ๋จํ๊ฒ ํ๋ ๋ฐฉ์์ด์. Board๋ "๊ฒฝ๋ก์ ๋ญ๊ฐ ์๋์ง ์กฐํ"๋ง ํ๊ณ , "๊ทธ๊ฒ ์ ํจํ์ง ํ๋จ"์ ๊ธฐ๋ฌผ์๊ฒ ์์ํ๋ ๊ตฌ์กฐ๋ฅผ ์๊ฐํด๋ณด์๋ฉด ์ข๊ฒ ์ต๋๋ค.
There was a problem hiding this comment.
ํด๋น ๋ถ๋ถ ๊ธฐ๋ฌผ์๊ฒ ๋ถ์ฌํ๋ ๋ฆฌํฉํ ๋ง์ ์งํํด๋ดค์ต๋๋ค. ์ด๋ฐ ๋ฆฌํฉํ ๋ง ์์ ์ด ์ต์ํ์ง ์์์ ๋ค์ ์ค๋ ๊ฑธ๋ ธ์ง๋ง.. ๋น๋ฐฅ์ด ์กฐ์ธํด์ฃผ์ ๋ถ๋ถ์ด ์ ๋ง ๋ง์ ํํธ๊ฐ ๋์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ๋ง ๊ฐ์ฌํฉ๋๋ค..!!
| import view.InputView; | ||
| import view.OutputView; | ||
|
|
||
| public class JanggiController { |
There was a problem hiding this comment.
์ง๋ฌธ์ธ๋ฐ์. controller๋ ์ด๋์ ์ฐฉ์ํ์ ๋ค์ด๋ฐ์ผ๊น์? ์ controller์ธ๊ฐ์?
There was a problem hiding this comment.
์ด๋ฒ์ ๋น๋ฐฅ์ด ์ง๋ฌธํด์ฃผ์ ๋๋ถ์ ์ปจํธ๋กค๋ฌ๊ฐ ์ด๋ค ์ญํ ์ ๊ฐ์ ธ์ผ ํ๋์ง์ ๋ํด ๋ค์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
์๋ฃ๋ฅผ ์ฐพ์๋ณด๋ ๊ณผ์ ์์ ๊ธ๋ง๋ค ์ค๋ช ์ด ์กฐ๊ธ์ฉ ๋ฌ๋ผ์ ๊ธฐ์ค์ ์ก๋ ๋ฐ ์๊ฐ๋ณด๋ค ์ด๋ ค์์ ๋๊ผ๊ณ , ๊ทธ๋์ ๋๋ฆ๋๋ก ๊ธฐ์ค์ ์ธ์ ์ ๋ฆฌํด๋ดค์ต๋๋ค.
์ฐ์ ์ปจํธ๋กค๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ์ ์ด์ ํ๋ฆ์ ์ ์ดํ๋ ์ญํ ์ด๋ผ๊ณ ์ดํดํ์ต๋๋ค. ์ธ๋ถ(View, ํด๋ผ์ด์ธํธ)์ ๋ด๋ถ(Model, Service) ์ฌ์ด์์ ์ค๊ฐ ๋ค๋ฆฌ ์ญํ ์ ํ๋ฉด์, ์ ๋ ฅ์ ๋๋ฉ์ธ์ด ์ดํดํ ์ ์๋ ํํ๋ก ๋ณํํ๊ณ , ๋ฐ๋๋ก ๊ฒฐ๊ณผ๋ฅผ ์ธ๋ถ์ ๋ง๊ฒ ๋ณํํ๋ โ๋ฒ์ญ๊ฐโ ์ญํ ์ ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ํ ์๋ชป๋ ์์ฒญ์ ์ด๊ธฐ์ ๊ฑธ๋ฌ๋ด๊ณ ํ๋ฆ์ ์ ์ดํ๋ โ๋ฌธ์ง๊ธฐโ ์ญํ ๋ ํจ๊ป ๊ฐ์ง๋ค๊ณ ์ ๋ฆฌํ์ต๋๋ค.
์๋น์ค ๋ ์ด์ด์ ์ ๋ฌด์ ๋ฐ๋ผ์๋ ์ญํ ์ ๋ฌด๊ฒ๊ฐ ๋ฌ๋ผ์ง๋ค๊ณ ๋ณด์์ต๋๋ค. ์๋น์ค๊ฐ ์๋ ๊ตฌ์กฐ์์๋ ์ปจํธ๋กค๋ฌ๊ฐ ๋๋ฉ์ธ ๊ฐ์ฒด๋ค์ ์ง์ ์กฐํฉํ๋ฉด์ ํ๋ฆ์ ์ด๋๋ ์ญํ ๊น์ง ๋ด๋นํ๊ฒ ๋๊ณ , ์๋น์ค ๋ ์ด์ด๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ ์ฑ ์์ ์๋น์ค์ ์์ํ๊ณ ์ปจํธ๋กค๋ฌ๋ ๋ผ์ฐํ ์ ์ง์คํ๋ ๊ตฌ์กฐ๊ฐ ๋ ์ ์ ํ๋ค๊ณ ์ดํดํ์ต๋๋ค.
๋ ํ๋ ๊ณ ๋ฏผํ๋ ๋ถ๋ถ์, ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ View๋ก ์ด๋ป๊ฒ ์ ๋ฌํด์ผ ํ๋์ง์์ต๋๋ค. ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ทธ๋๋ก ๋๊ธฐ๋ ๋ฐฉ์์ View๊ฐ ๋๋ฉ์ธ ๋ด๋ถ๋ฅผ ์๊ฒ ๋๋ฉด์ ๊ฒฐํฉ๋๊ฐ ๋์์ง๋ค๊ณ ๋๊ผ๊ณ , ์ด๋ฅผ ํผํ๊ธฐ ์ํด DTO๋ก ๋ณํํด์ ์ ๋ฌํ๋ ๋ฐฉ์์ด ๋ ์ ์ ํ๋ค๊ณ ํ๋จํ์ต๋๋ค. DTO๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ฉ์ธ์ ๋ณดํธํ ์ ์๊ณ , View์์ ์์กด์ฑ๋ ๋์ ์ ์์ด์ ๋ณ๊ฒฝ์ ๋ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์ด๋ ๊ฒ ๋๋ฆ๋๋ก ๊ธฐ์ค์ ์ธ์ ์ ๋ฆฌํด๋ณด์๋๋ฐ, ํน์ ์ ๊ฐ ๋์น๊ณ ์๊ฑฐ๋ ์๋ชป ์ดํดํ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋น๋ฐฅ์ ์๊ฒฌ์ ๋ค์ด๋ณด๊ณ ์ถ์ต๋๋ค.
There was a problem hiding this comment.
์ ์ ๋ ์ง๊ธ controller์ ๋ํด ๊ต์ก์ ๋ฐ์๊ฑด๊ฐ ํด์ ์ฌ์ญค๋ณธ๊ฑฐ์๋๋ฐ์
์ง๊ธ์ ์ด ๋ถ๋ถ๋ณด๋ค ๋ค๋ฅธ ๋ถ๋ถ์ ์ง์คํ์๋๊ฒ ๋ ๋ซ์ง ์๋ ์ถ์ต๋๋ค.
์ฐพ์๋ณด์ ๋ด์ฉ๋ค์ ์ ์ ๋ฆฌํด์ ๊ณ์ํด์ ๋ฐ์ ์ํค๋ฉด ์ข์๊ฒ ๊ฐ์ต๋๋ค. ๐
| if (value <= 0 || value > 10) { | ||
| throw new IllegalArgumentException("ํ์ ์์น๋ 1-10 ์ฌ์ด์ ์์ด์ผ ํฉ๋๋ค."); | ||
| } |
There was a problem hiding this comment.
์ถฉ๋ถํ ์์๋ก ๋์ด๋ ๊ด์ฐฎ์ ๊ฐ์ด์๋๊ฒ ๊ฐ์ต๋๋ค! ๋ฐ๋ก ์์ ํด๋๊ฒ ์ต๋๋ค
|
|
||
| import domain.position.Position; | ||
|
|
||
| public class EmptyPiece implements Piece { |
There was a problem hiding this comment.
์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด๋ณผ๊น์?
There was a problem hiding this comment.
์ด๋ฒ์ ์ฑ๊ธํค์ ๊ณต๋ถํด๋ณด๋ฉด์ ์ฌ๋ฌ๊ฐ์ง ๊ตฌํ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ๋ ์์์ต๋๋ค.
ํนํ ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๊ฐ ๋์์ ์์ฒญํ๋ฉด ์ฌ๋ฌ๊ฐ์ ์ฑ๊ธํค ๊ฐ์ฒด๊ฐ ์๊ธธ ์ฌ์ง๊ฐ ์์ด์ ์ด๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋ ค๊ณ ์ฌ๋๋ค์ด ๊ณ ๊ตฐ๋ถํฌํด์๋์ง ๊ทธ ๊ณผ์ ์ด ์ธ์ ๊น์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ฌ EmptyPiece์์๋ Bill-pugh ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํด๋ดค๋๋ฐ์, JVM ๋ ๋ฒจ์์ ์ฐ๋ ๋ ์์ ์ฑ์ ์ง์ํด์ ์ฑ๋ฅ๊ณผ ํจ์จ์ ๋ ๋ค ์ฑ๊ธด ๋ฐฉ์์ด๋ผ๊ณ ๋ฐฐ์ ์ต๋๋ค. ๋ง์ฝ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ์ฌ์ฉํ๋ค๋ผ๋ ์๊ตฌ์ฌํญ์ด ์๊ธธ ๋ ๊ผญ ์ ๊ฒฝ์จ์ผํ๋ ๋ถ๋ถ์ด ์๋๊น? ์๊ฐํ์ฌ ํด๋น ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํด๋ดค๋๋ฐ, ์ ๊ฐ ์ ์ ์ฉํ ๋ถ๋ถ์ธ์ง ๊ถ๊ธํฉ๋๋ค!!
There was a problem hiding this comment.
๋น๋ฐฅ! ๋ฆ๊ฒ ํ์ ์ ๋จ๊ฒจ๋๋ ค ์ฃ์กํฉ๋๋ค. ์ ๋๋ฆ๋๋ก ๋ฉ๋ํ ์ ์๋ ์ด์ ๋ฅผ ์ฐพ๊ณ , ๊ด๋ จ๋ ์๋ฃ๋ฅผ ์ฐพ์๋ณด๋ฉฐ ์ ๋ฆฌํ๋ ๊ณผ์ ์ด ์๊ฐ๋ณด๋ค ์ค๋ ๊ฑธ๋ ธ์ต๋๋ค. ๋จ์ํ ํผ๋๋ฐฑ์ ๋ฐ์ํ๋ ๋ฐ์ ๊ทธ์น๊ธฐ๋ณด๋ค ์ค์ค๋ก ์ดํดํ๊ณ ์ค๋ช ํ ์ ์๋ ์์ค๊น์ง ๊ฐ์ ธ๊ฐ๊ณ ์ถ์ด์ ์๊ฐ์ด ์กฐ๊ธ ๋ ํ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์์ง ์ ์ฒด ์ผ์ ์ด ์ด๋ป๊ฒ ๋ ์ง๋ ์ ํํ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ง์ฝ ์ ํ ๋ฏธ์ (3์ฃผ์ฐจ)์์๋ ์ด์ด์ ๊ณ์ ๋ ๋ฐ์ ์ํฌ ์ ์๋ ๊ธฐํ๊ฐ ์๋ค๋ฉด ๋๊น์ง ํ๊ณ ๋ค์ด๋ณด๊ณ ์ถ์ต๋๋ค. ์ด๋ฒ์ ๊ณ ๋ฏผํ๋ ๋ถ๋ถ๋ค์ด ๋จ์ํ ๊ตฌํ ๋ฌธ์ ๋ก ๊ทธ์น๋ ๊ฒ๋ณด๋จ ์ค๊ณ์ ๋ํ ๊ธฐ์ค์ ์ธ์ฐ๋ ๊ณผ์ ์ด๋ผ๊ณ ๋๊ปด์ ธ์ ๊ฐ๋ฅํ๋ค๋ฉด ๋ ๊น๊ฒ ๊ฐ์ ธ๊ฐ ๋ณด๊ณ ์ถ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ ๊ฐ์ง ๋ ์ฌ์ญค๋ณด๊ณ ์ถ์ต๋๋ค. ๋จ์ ๋ ๋ฒจ1 ๊ธฐ๊ฐ ๋์ ์ ๊ฐ ์ด๋ค ๋ถ๋ถ์ ์ง์คํ๋ฉด ์ข์์ง์ ๋ํด ์กฐ์ธ์ ์ป๊ณ ์ถ์ต๋๋ค. ์ง๊ธ๊น์ง ์งํํ๋ฉด์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ๋ํด ๋๋ฆ๋๋ก ๊ณ ๋ฏผํด์๋ค๊ณ ์๊ฐํ์ง๋ง, ์์ง ๊ธฐ์ค์ด ๋ช ํํ๊ฒ ์กํ๋ค๊ธฐ๋ณด๋ค๋ ์ํฉ์ ๋ฐ๋ผ ๋ง์ด ํ๋ค๋ฆฌ๋ ๋๋๋ ์์ต๋๋ค. ์ด๋ฐ ์ํ์์ ์กฐ๊ธ ๋ ๋จ๋จํ ๊ธฐ์ค์ ๋ง๋ค๊ธฐ ์ํด ๋์์ด ๋ ๋งํ ์์ ์ด๋, ์ง์ ๋ถ๋ชํ๋ณด๋ฉด์ ๋ฐฐ์ธ ์ ์๋ ๊ณผ์ ๊ฐ ์๋ค๋ฉด ์ถ์ฒํด์ฃผ์ค ์ ์๋๊ฒ ์์์ง ๊ถ๊ธํฉ๋๋ค!!
๊ฐ๋ฅํ๋ค๋ฉด ์ด ์ ๋๋ ๊ผญ ์ง๊ณ ๋์ด๊ฐ๋ฉด ์ข๊ฒ ๋ค๋ผ๊ณ ์๊ฐํ์๋ ๋ถ๋ถ์ด๋, ์ง๊ธ ๋จ๊ณ์์ ์ ๊ฐ ๋ณด์ํ๋ฉด ์ข์ ์ง์ ์ด ์๋ค๋ฉด ํจ๊ป ๋ง์ํด์ฃผ์๋ฉด ์ ๋ง ํฐ ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋จ๊ฒจ์ฃผ์ ๋ฆฌ๋ทฐ ๋๋ถ์ ๋ง์ด ์ฑ์ฅํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!!
There was a problem hiding this comment.
ํนํ ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๊ฐ ๋์์ ์์ฒญํ๋ฉด ์ฌ๋ฌ๊ฐ์ ์ฑ๊ธํค ๊ฐ์ฒด๊ฐ ์๊ธธ ์ฌ์ง๊ฐ ์์ด์ ์ด๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋ ค๊ณ ์ฌ๋๋ค์ด ๊ณ ๊ตฐ๋ถํฌํด์๋์ง ๊ทธ ๊ณผ์ ์ด ์ธ์ ๊น์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ฌ EmptyPiece์์๋ Bill-pugh ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํด๋ดค๋๋ฐ์, JVM ๋ ๋ฒจ์์ ์ฐ๋ ๋ ์์ ์ฑ์ ์ง์ํด์ ์ฑ๋ฅ๊ณผ ํจ์จ์ ๋ ๋ค ์ฑ๊ธด ๋ฐฉ์์ด๋ผ๊ณ ๋ฐฐ์ ์ต๋๋ค. ๋ง์ฝ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ์ฌ์ฉํ๋ค๋ผ๋ ์๊ตฌ์ฌํญ์ด ์๊ธธ ๋ ๊ผญ ์ ๊ฒฝ์จ์ผํ๋ ๋ถ๋ถ์ด ์๋๊น? ์๊ฐํ์ฌ ํด๋น ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํด๋ดค๋๋ฐ, ์ ๊ฐ ์ ์ ์ฉํ ๋ถ๋ถ์ธ์ง ๊ถ๊ธํฉ๋๋ค!!
์๊ฑฐ ๋ฐํ์์ ํธ์ถ๋ ๋ ์ฑ๊ธํค ๊ฐ์ฒด ์์ฑํ๊ฒ ๋ค ์ธ๊ฒ ๊ฐ๋ค์. ์ ๋ ์ด์ ๋๋ผ๋ฉด ๊ทธ๋ฅ static ํ๋๋ฅผ EmptyPiece์ ๋์ด๋ ๊ด์ฐฎ์๋ณด์ฌ์. ์ง๊ธ ๋ฐฉ์์ ์ธ์คํด์ค ์์ฑ๋น์ฉ์ด ๋น์ผ๋ฐ ์์ฐ์ผ์๋ ์์ผ๋ฉด ์ข ๋ ์๋ฏธ์๋ ๋ฐฉ์์ผ๋ก ๋ณด์ด๋ค์
There was a problem hiding this comment.
๊ทธ๋ฆฌ๊ณ ํ ๊ฐ์ง ๋ ์ฌ์ญค๋ณด๊ณ ์ถ์ต๋๋ค. ๋จ์ ๋ ๋ฒจ1 ๊ธฐ๊ฐ ๋์ ์ ๊ฐ ์ด๋ค ๋ถ๋ถ์ ์ง์คํ๋ฉด ์ข์์ง์ ๋ํด ์กฐ์ธ์ ์ป๊ณ ์ถ์ต๋๋ค. ์ง๊ธ๊น์ง ์งํํ๋ฉด์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ๋ํด ๋๋ฆ๋๋ก ๊ณ ๋ฏผํด์๋ค๊ณ ์๊ฐํ์ง๋ง, ์์ง ๊ธฐ์ค์ด ๋ช ํํ๊ฒ ์กํ๋ค๊ธฐ๋ณด๋ค๋ ์ํฉ์ ๋ฐ๋ผ ๋ง์ด ํ๋ค๋ฆฌ๋ ๋๋๋ ์์ต๋๋ค. ์ด๋ฐ ์ํ์์ ์กฐ๊ธ ๋ ๋จ๋จํ ๊ธฐ์ค์ ๋ง๋ค๊ธฐ ์ํด ๋์์ด ๋ ๋งํ ์์ ์ด๋, ์ง์ ๋ถ๋ชํ๋ณด๋ฉด์ ๋ฐฐ์ธ ์ ์๋ ๊ณผ์ ๊ฐ ์๋ค๋ฉด ์ถ์ฒํด์ฃผ์ค ์ ์๋๊ฒ ์์์ง ๊ถ๊ธํฉ๋๋ค!!
์ง๊ธ์ ๋ง์ ํฌ๋ฃจ๋ค์ด๋ ์๊ฒฌ์ ๋๋๋๊ฒ ๊ฐ์ฅ ๋ง๊ณ ๋น ๋ฅด๊ฒ ์ป์ด๊ฐ ์ ์๋ ๋ถ๋ถ์ด ์์๊ฒ ๊ฐ์์. ์๋ฌด๋๋ ๊ฐ์ ์์ ์ ์๋ ์ฌ๋๋ค์ด๋ ์ด์ผ๊ธฐ๋ฅผํ๋ฉด ์ปจํ ์คํธ ๋ถ์ผ์น๊ฐ ์ ์ด์ ์๋๋ฐฉ์ด ์ด์ผ๊ธฐํ๋๊ฒ์ด ๋ ์ ์ดํด๊ฐ ๋๋๊ฒ ๊ฐ์์์.
ํ๋์ ๋ฏธ์ ์ด ๋ค ๋๋๊ณ ๋๋ฉด(ex. ์ฅ๊ธฐ๋ฏธ์ ) ์ด๋ฒ์ ์์ฑํ ์ฝ๋์ค์ ๊ฐ์ ์ ๋ํ๊ณ ์ถ์ ๋ถ๋ถ์ด๋ ๊ณ ๋ฏผ์ด ๋ง์ด ๋๋ ๋ถ๋ถ์ ์ ๊ธฐ์ตํ๋ค์ ๋ค๋ฅธ ํฌ๋ฃจ๋ค์ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์ดํด๋ณด๋๊ฒ๋ ๋์์ด ๋ ๊ฒ ๊ฐ์์. ์ค์ํ๊ฑด ๋ฏธ์ ์ด ๋๋๋ค์์ด์ด์ผ ํ๋๋ฐ์. ๊ทธ๋์ผ ์ค์ค๋ก ๊ณ ๋ฏผ์ ๋ง์ดํด์ ๊นจ๋ซ๋ ๋ถ๋ถ์ด ๋ง์๊ฒ ๊ฐ์์.
์ฑ ์ ์ด๊ฒ์ ๊ฒ ๋ง์๊ฒ ๊ฐ๊ธดํ๋ฐ.. ํ ์คํธ ๊ด๋ จํด์๋ ๋จ์ ํ ์คํธ๋ผ๋ ์ฑ ์ ๊ผญ ์ฝ์ด๋ณด์๋ฉด ์ข์๊ฒ ๊ฐ์์. ์ ๋ ๋๋ฒ? ์ธ๋ฒ ์ฝ์๊ฒ ๊ฐ์๋ฐ ์ฝ์๋๋ง๋ค ๋ค๋ฅด๊ฒ ๋ณด์ด๋ ๋ฉด์ด ์๊ธฐ๊ธฐ๋ ํ๋๊ฒ ๊ฐ์์ ์ข์์ฑ ๊ฐ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ช ์ ํด๋ฆฐ์ํคํ ์ฒ, ํด๋ฆฐ์ฝ๋ ์ถ์ฒ๋๋ฆฝ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ด๋ฒ๋ฏธ์
๊ณผ ์์ผ๋ก์ ๋ฏธ์
์ ์ํํ๋ฉด์ ๊ฐ์ธ์ ์ผ๋ก ํญ์ ์ผ๋ํ๊ณ ์ฝ๋๋ฅผ ์์ฑํ์
จ์ผ๋ฉด ํ๋ ๋ถ๋ถ์
๋ณ๊ฒฝ์ ์ ์ฐํ๊ณ ํ์ฅ์ ์ฉ์ดํ ๊ตฌ์กฐ๋ฅผ ์๊ฐํ๋ฉฐ ์ฝ๋๋ฅผ ์์ฑํ์
จ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค. OCP ์์.
ํ์ ์์ ๊ฐ์ฅ ๊ณต์๊ฐ ๋ง์ด ๋๋ ์์ ์ด OCP๋ฅผ ์งํค์ง ์์ ๋ฐ์ํ๋ ์ผ๋ค์ด ๋ง์๊ฒ ๊ฐ์์์. ์ง๊ธ๋ถํฐ ์ต๊ด๊ณผ ๊ฒฝํ์ ์ ๋ง๋ค์ด๋์๋ฉด ๋์ค์ ํฐ ๋์์ด ๋์ง ์์๊น ์ถ์ต๋๋ค.
pci2676
left a comment
There was a problem hiding this comment.
์ง๋ฌธ์ ๋ํ ๋ต๋ณ๊ณผ ์ถ๊ฐ ๋ฆฌ๋ทฐ๋ฅผ ๋จ๊ฒจ๋์์ด์.
๋ฆฌ๋ทฐ์ ๋ํ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ์ ๋ฐ์ ์ผ๋ก ๊ฒํ ํ์ ์ ๋น์ทํ ๋ถ๋ถ์ด ์๋ค๋ฉด ๊ฐ์ด ๊ฐ์ ํด์ฃผ์ธ์.
|
|
||
| @Override | ||
| public boolean isAlly(Piece other) { | ||
| return other instanceof ActivePiece activePiece && this.team == activePiece.team; |
| int count = 0; | ||
| for (Piece piece : piecesOnRoute) { | ||
| if (piece instanceof Cannon) { | ||
| throw new IllegalArgumentException("ํฌ๋ ํฌ๋ฅผ ๋์ง ๋ชปํฉ๋๋ค."); |
| } | ||
|
|
||
| public void move(Position source, Position destination) { | ||
| board.move(source, destination); |
There was a problem hiding this comment.
board.move()๋ฅผ ํธ์ถํ ๋ค ๋ฐ๋ก turn = turn.next()๋ฅผ ํ๊ณ ์๋๋ฐ์, ํ์ฌ ํด์ ๊ธฐ๋ฌผ์ธ์ง ๊ฒ์ฆํ๋ ๋ก์ง์ด ๋ณด์ด์ง ์์์. ์๋๋ฐฉ ๊ธฐ๋ฌผ์ ๋ด ํด์ ์์ง์ผ ์ ์๋ ์ํ์ธ ๊ฒ ๊ฐ์๋ฐ, ์ด ๋ถ๋ถ์ ์ด๋์ ๊ฒ์ฆ๋๊ณ ์๋์?
| private void validate(int value) { | ||
| if (value <= 0 || value > 10) { | ||
| throw new IllegalArgumentException("ํ์ ์์น๋ 1-10 ์ฌ์ด์ ์์ด์ผ ํฉ๋๋ค."); | ||
| } |
There was a problem hiding this comment.
์ฌ๊ธฐ ์์ ์ ์ธํ๊ฑฐ ์ฌ์ฉํ์ง ์๊ณ ์๋๊ฒ ๊ฐ์์?
| import java.util.List; | ||
|
|
||
| public class Soldier extends ActivePiece { | ||
| private static final List<Integer> rowOffsets = List.of(-1, 1); |
There was a problem hiding this comment.
์์ ๋ค์ด๋ฐ ๋ฒ์น์ด ์์ง ์๋์?
isValidSideMove ๋ฅผ ๋ณด์๋๋ฐ์
ํ๋ ์ด๋ฆ๊ณผ ๋น๊ต ๋์์ด ๊ต์ฐจ๋์ด ์์ด์ ์ฝ๋ ์ฌ๋ ์ ์ฅ์์ ํผ๋์ค๋ฌ์์
์กฐ๊ธ๋ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์์๊น์?
๊ทธ๋ฆฌ๊ณ depth ์กฐ๊ฑด์ ์๋ฐฐํ๋ค์
| public class InputView { | ||
| private static final int MOVE_INPUT_COUNT = 4; | ||
| private final Scanner scanner = new Scanner(System.in); | ||
|
|
There was a problem hiding this comment.
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()),; |
There was a problem hiding this comment.
EMPTY ํ์
์ด PieceType enum์ ํฌํจ๋์ด ์๋๋ฐ์, "๋น ์นธ"์ด ๊ธฐ๋ฌผ์ ํ ์ข
๋ฅ์ธ์ง ์๊ฐํด๋ณด๋ฉด ์กฐ๊ธ ์ด์ํ ๋ถ๋ถ์ด ์์ด๋ณด์ด๋ค์. PieceType์ด ๊ธฐ๋ฌผ์ ์ ์(score)์ ์ด๊ธฐ ๋ฐฐ์น ์ด(initialColumns)์ ๊ฐ๊ณ ์๋๋ฐ, EMPTY๋ ์ด ๋ ๊ฐ์ง ๋ชจ๋ ์๋ฏธ๊ฐ ์๊ฑฐ๋ ์. EmptyPiece์ toString()์ ์ํด์๋ง ์กด์ฌํ๋ ๊ฒ ๊ฐ์๋ฐ, ์ด enum ๊ฐ์ด ์ฌ๊ธฐ ์๋ ๊ฒ ์ ์ ํ์ง ํ๋ฒ ๊ณ ๋ฏผํด๋ณด์๋ฉด ์ข๊ฒ ์ด์.
| 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)); | ||
| } |
There was a problem hiding this comment.
์ ์ฐจ์ ์ผ๋ก ๋ชจ๋ ๋ฐฉํฅ์ ๋ํด ๋์ด์ด ๋๊ฒ ๊ฐ์๋ฐ ์ถ์ํํ ์ ์์๊น์?
์ด ๋ถ๋ถ์ ์ฝ์ง ์์์๋ ์๋๋ฐ์ ๋๋ฌด ์ด๋ ต๋ค ์ถ์ผ๋ฉด ์ํ์ ๋ ๋์ด์.
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
์๋ ํ์ธ์ ๋น๋ฐฅ!
์ฅ๊ธฐ ๋ฏธ์ ์ฌ์ดํด1 ๋ฆฌ๋ทฐ ์ ๋ถํ๋๋ฆฝ๋๋ค ๐
Q1. searchRoute์ ์์น์ ํ์ ์บ์คํ
Q2. ์๋ฏธ ์๋ ๋ฉ์๋ ๊ตฌํ
Q3. ๋ถ๋ณ ๊ฐ์ฒด์ Getter ์ฌ์ฉ
๋ํ ๋จ์ ์กฐํ ํ ๋ฒ์ด๋ฉด ํด๊ฒฐ๋ ๋ก์ง์, getter๋ฅผ ์ฐ์ง ์๊ธฐ ์ํด ๊ฐ์ฒด์ ์ญํ ์ ๋ถ์ฐ์ํค๋ค ๋ณด๋ ์คํ๋ ค ๋ฉ์๋๊ฐ ๋์ด๋๊ณ ๊ตฌํ์ด ๋ ๋ณต์กํด์ง๋ ๋๋๋ ๋ฐ์์ต๋๋ค. ๋ฐ๋ผ์ getter๋ฅผ ์ง์ํด์ผ ํ๋ ๋ช ํํ ์ด์ ๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ํ, ์ค์ ์ค๋ฌด์์๋ ๋๋ฉ์ธ ๋ชจ๋ธ์์ getter๋ฅผ ์ด๋ ์ ๋๋ก ์ ํํ๋์ง ๊ถ๊ธํฉ๋๋ค. ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ์ ํธ์์ฑ๊ณผ ์ด๋ ์ ๋ ํํํ๋ฉด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง, ํ์ ์์๋ ์ด๋ค ๊ธฐ์ค์ผ๋ก ๊ท ํ์ ์ก๋์ง๋ ๊ถ๊ธํฉ๋๋ค.
Q4. ๋ฐ์ฑ