[๐ ์ฌ์ดํด2 - ๋ฏธ์ (๊ธฐ๋ฌผ ํ์ฅ + DB ์ ์ฉ)] ์์ดํ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#335
Conversation
syoun602
left a comment
There was a problem hiding this comment.
์๋ ํ์ธ์ ์์ดํ~
์ฌ์ดํด2 ์์ฃผ ์ ๊ตฌํํด์ฃผ์ จ๋ค์ ๐ ์ง๋ฌธ์ ๋ํ ๋๋ต์ ์ฝ๋ฉํธ์ ๋จ๊ฒจ๋์์ผ๋ ํ์ธ ๋ถํ๋๋ ค์~
๋ํ, ์ํํ 2๋จ๊ณ ๋ฆฌ๋ทฐ๋ฅผ ์ํด step1์ด ๋จธ์ง๋ ๋ธ๋์น๋ฅผ ๊ธฐ์ค์ผ๋ก rebaseํด์ ์ ์ถํด์ฃผ์ธ์. ํ์ฌ๋ 1๋จ๊ณ ๊ตฌํ ๋ด์ฉ๋ ํจ๊ป ๋ณด์ฌ์ ์ด๋ฒ ๋จ๊ณ์์ ์ค์ ๋ก ์ด๋ค ๋ถ๋ถ์ด ํ์ฅ๋์๋์ง ๋ณด๋ ค๋ฉด ์ ๊ฐ ์ง์ ์ปค๋ฐ์ ์ ์ดํด์ผ ํ๋๋ฐ, rebase์ ์ฅ์ ์ ํ๋ฒ ์ฐพ์๋ด ์๋ค.
๋ค์ ์์ฒญ ์ ์ ์ ์ฉ ๋ถํ๋๋ ค์ ๐
| private Board(Map<Position, Piece> pieces) { | ||
| this.pieces = pieces; | ||
| } | ||
|
|
||
| public static Board from(Map<Position, Piece> pieces) { | ||
| return new Board(pieces); | ||
| } |
There was a problem hiding this comment.
public ์์ฑ์๋ฅผ ์ด์ด๋๋ ๊ฒ๊ณผ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์?
There was a problem hiding this comment.
public ์์ฑ์๋ฅผ ์ด์ด๋๋ ๊ฒ๊ณผ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์?
public ์์ฑ์๋ ๋๊ตฌ๋ new Board(pieces)๋ก ์์ฑํ ์ ์์ด์ ์์ฑ ๋ฐฉ์์ ์ ์ดํ๊ธฐ ์ด๋ ต์ต๋๋ค.
์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ Board.from(pieces)๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฑ ์๋๋ฅผ ๋ช
ํํ ํํํ ์ ์๊ณ ,
์ดํ ์บ์ฑ์ด๋ ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ๋ด๋ถ๋ง ์์ ํ๋ฉด ๋์ด ๋ณ๊ฒฝ์ ๋ ์ ์ฐํฉ๋๋ค.
๋ํ ์์ฑ์๋ฅผ private์ผ๋ก ์ ํํด ์ด๊ธฐ ์์ฑ(BoardFactory)๊ณผ ๋ณต์(Repository) ๊ฒฝ๋ก๋ฅผ ํตํด์๋ง ์์ฑ๋๋๋ก ๊ฐ์ ํ ์ ์์ด, ์์ฑ ๊ฒฝ๋ก๋ฅผ ๋ช
ํํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค๋ ์ ์์ ์ ํํ์ต๋๋ค.
| return showBoard(); | ||
| } | ||
|
|
||
| public Score calculateScore(Team team) { |
There was a problem hiding this comment.
๋ก์ง์ ๋๋ฌด ํฉ์ด์ ธ ์๋ ๊ฒ ๊ฐ์์. ๊ธฐ๋ฌผ ์ ์๋ pieceType์ด, ํฉ์ฐ์ board๊ฐ, ๋ค ์ ์ฉ์ score๊ฐ ํ๊ณ ์ต์ข ์นํจ๋ game์ด ์งํํ๊ณ ์์ด์. ๋๊ตฌ์๊ฒ ์ด๋ป๊ฒ ์ ๊ณตํด์ ์ญํ ์ ์ข ๋ ๋ชจ์๋ณผ ์ ์์์ง ๊ณ ๋ฏผํด๋ด ์๋ค.
There was a problem hiding this comment.
๋ก์ง์ ๋๋ฌด ํฉ์ด์ ธ ์๋ ๊ฒ ๊ฐ์์. ๊ธฐ๋ฌผ ์ ์๋ pieceType์ด, ํฉ์ฐ์ board๊ฐ, ๋ค ์ ์ฉ์ score๊ฐ ํ๊ณ ์ต์ข ์นํจ๋ game์ด ์งํํ๊ณ ์์ด์. ๋๊ตฌ์๊ฒ ์ด๋ป๊ฒ ์ ๊ณตํด์ ์ญํ ์ ์ข ๋ ๋ชจ์๋ณผ ์ ์์์ง ๊ณ ๋ฏผํด๋ด ์๋ค.
์ ์ ๊ณ์ฐ ์ฑ
์์ด PieceType, Board, Score, JanggiGame์ ๋ถ์ฐ๋์ด ์์์ต๋๋ค.
ScoreResult ๊ฐ์ฒด๋ฅผ ๋์
ํด ๋ ํ์ ์ ์์ ์นํจ ํ์ (isHanWin, isChoWin, isDraw)์ ํ ๊ณณ์ผ๋ก ์์งํ์ต๋๋ค. Board.calculateScoreResult()๊ฐ ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ณ , JanggiGame์ ์ถ๋ ฅ๋ง ๋ด๋นํ๋๋ก ๊ฐ์ ํ์ต๋๋ค.
| .filter(piece -> piece.isSame(team)) | ||
| .mapToInt(piece -> piece.getType().getScore()) | ||
| .sum(); | ||
| Score score = Score.of(sum); |
There was a problem hiding this comment.
์ด ๋ถ๋ถ๋ ๊ทธ๋ ๊ณ ์ ๋ฐ์ ์ผ๋ก ์ ์ ํฉํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ์๋ ์ด์ ๊ฐ ๊ถ๊ธํฉ๋๋ค.
new Score(10) vs Score.from(10)
๋ํ, from ๊ณผ of ์ฌ์ฉ์ ๊ธฐ์ค์ด ์๋ ๊ฒ ๊ฐ๋ค์
There was a problem hiding this comment.
์ด ๋ถ๋ถ๋ ๊ทธ๋ ๊ณ ์ ๋ฐ์ ์ผ๋ก ์ ์ ํฉํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ์๋ ์ด์ ๊ฐ ๊ถ๊ธํฉ๋๋ค.
new Score(10)vsScore.from(10)๋ํ, from ๊ณผ of ์ฌ์ฉ์ ๊ธฐ์ค์ด ์๋ ๊ฒ ๊ฐ๋ค์
์ ์ ํฉํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ์์ฑ์๋ฅผ private์ผ๋ก ์ ํํ์ฌ ์์ฑ ๊ฒฝ๋ก๋ฅผ ๋ช
ํํ ํ๊ณ ,
์ดํ ๊ฒ์ฆ์ด๋ ์บ์ฑ ๋ก์ง ์ถ๊ฐ ์ ๋ด๋ถ๋ง ์์ ํ๋ฉด ๋๋ ์ ์ฐํจ์ ์ป๊ธฐ ์ํด์์
๋๋ค.
of์ from์ ์ฌ์ฉ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
of๋ ์ธ์๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ๋ (์: Score.of(72.5), Position.of(1, 5)),
from์ ๋ณํ์ด ์๋ฐ๋ ๋ (์: Position.from("25") โ ๋ฌธ์์ด ํ์ฑ, Board.from(map))๋ก ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ์ต๋๋ค.
There was a problem hiding this comment.
์ฐ์ ๊ฒ์ฆ์ ๋ํด์๋ ๋ง์ํ์ ๊ฒ์ฒ๋ผ ์์ฑ ๊ฒฝ๋ก๋ฅผ ํต์ ํ๊ณ ์ถ๋๋ผ๋ ๊ฒฐ๊ตญ ์ฃผ์์ฑ์์์ ํญ์ ๊ฒ์ฆํด์ผ ๋๋ค๊ณ ์๊ฐํด์. ์ฃผ์์ฑ์๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋๋ผ๋ ํญ์ ๊ฑฐ์น๊ฒ ๋๋ ๋ง์ง๋ง ๋ณดํธ ์ฅ์น๋๊น์. ๊ทธ๋ฆฌ๊ณ ์บ์ฑ์ ์ง๊ธ ์ฌ์ฉํ๊ณ ์์ง ์์๋ฐ, ๊ทธ๊ฑธ ๊ณ ๋ คํ๋ค๋๊ฒ ํฌ๊ฒ ์๋ฟ์ง๋ ์๋ค์.
๋ง์ง๋ง์ผ๋ก of์ from์ ๊ธฐ์ค ์์ฒด๋ ์ถฉ๋ถํ ์ดํด๋์ง๋ง, ํ์ฌ ์ฝ๋์์ ์ด ์ด๋ฆ๋ค์ด ์ ๋ง ์์ฑ ์๋๋ฅผ ์ ๋๋ฌ๋ด๊ณ ์๋์ง๋ ํ ๋ฒ ๋ ์๊ฐํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ฌด๋ถ๋ณํ๊ฒ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ๋๋ฆฌ๊ธฐ๋ณด๋ค๋ ํ๋์ ์์ ํ ์ฃผ์์ฑ์๋ฅผ ๋๊ณ ํ์ํ ๊ฒฝ์ฐ์๋ง ์๋ฏธ ์๋ ๋ถ์์ฑ์๋ ์ ์ ํฉํฐ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ ์ ํธํฉ๋๋ค. ์ง๊ธ Score๋ง ๋ดค์๋ ์ ์ ํฉํฐ๋ฆฌ์ ์ด๋ค ์ฅ์ ์ด ๋ น์๋ค์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋จ์ํ ์ดํํฐ๋ธ ์๋ฐ์์ ์ ์ ํฉํฐ๋ฆฌ๋ฅผ ์ ํธํ๋ค๊ณ ํด์ ์ผ๊ด์ ์ผ๋ก ์ ์ฉํ๊ธฐ๋ณด๋ค๋ ์ ์ด ๊ฒฝ์ฐ์ ์์ฑ์๋ณด๋ค ์ ์ ํฉํฐ๋ฆฌ๊ฐ ๋ ์ ์ ํ์ง๊น์ง ํจ๊ป ์ค๋ช ๊ฐ๋ฅํด์ผ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํด์. ์ดํํฐ๋ธ ์๋ฐ์์ ๋งํ๋ ์ ์ ํฉํฐ๋ฆฌ๋ ํญ์ ์์ฑ์๋ณด๋ค ์ฐ์ํ๋ค๋ ์ทจ์ง๋ผ๊ธฐ๋ณด๋ค, ์ด๋ฆ์ ๋ถ์ฌํ ์ ์๊ณ ์์ฑ ๋ฐฉ์์ ํต์ ํ ์ ์๋ ๋ฑ ๋ถ๋ช ํ ์ด์ ์ด ์์ ๋ ์ ํ์ง๋ก ๊ณ ๋ คํ๋ผ๋ ์๋ฏธ๋ผ๊ณ ์๊ฐํด์.
| } | ||
|
|
||
| protected void validatePalaceMove(Position from, Position to, String errorMessage) { | ||
| Palace palace = ownPalace(); |
There was a problem hiding this comment.
์ฐ์ ๋ฉ์๋ ์ด๋ฆ์ด palace๋ฅผ ๋ฐํํ ๊ฒ ๊ฐ์ ๋๋์ ์๋ค์ด์ ๐ค
๊ณ ๋ฏผํด๋ณผ ํฌ์ธํธ๋ AbstractPiece์ ownPalace()๊ฐ ๋ค์ด๊ฐ๋ฉด์, ์์ ํ์ ์ด ํ๋ฟ ์๋๋ผ ๊ถ์ฑ์ด๋ผ๋ ๋น๊ต์ ๊ตฌ์ฒด์ ์ธ ์ฅ๊ธฐ ๊ท์น๊น์ง ํจ๊ป ์๊ณ ์๋ ๊ตฌ์กฐ๊ฐ ๋์ด์. ํ์ฌ ๊ท๋ชจ์์๋ ๊ตฌํ์ ๋จ์ํ๊ฒ ๋ง๋๋ ์ฅ์ ๋ ์์ง๋ง, ์ถ์ ๊ธฐ๋ฌผ์ ์ฑ ์์ ์ด๋๊น์ง๋ก ๋ณผ์ง์ ๋ฐ๋ผ ์ด๋ฐ ์ง์์ ๊ณ์ ์์ ํ์ ์ ๋์ง ํ ๋ฒ ๋ ๊ณ ๋ฏผ ์ ๋๋ ํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค์.
์๋ฅผ ๋ค์ด ํ๊ณผ ๊ถ์ฑ์ ๋์ ์ฑ ์์ Palace ์ชฝ์ผ๋ก ์ฎ๊ธฐ๋ ๋ฐฉํฅ๋ ์์ ๊ฒ ๊ฐ์์. ๋ณ๊ฒฝํ์ง ์๋๋ค๋ฉด, palace์๊ฒ team์ ์ฃผ๊ณ ์ง์์ ๋ฐ๋ ๋ฉ์๋๊ฐ ์๋๊ฒ ๋ ์ฝ๊ธฐ ์ข์๋ณด์ ๋๋ค.
There was a problem hiding this comment.
์ฐ์ ๋ฉ์๋ ์ด๋ฆ์ด palace๋ฅผ ๋ฐํํ ๊ฒ ๊ฐ์ ๋๋์ ์๋ค์ด์ ๐ค
๊ณ ๋ฏผํด๋ณผ ํฌ์ธํธ๋ AbstractPiece์ ownPalace()๊ฐ ๋ค์ด๊ฐ๋ฉด์, ์์ ํ์ ์ด ํ๋ฟ ์๋๋ผ ๊ถ์ฑ์ด๋ผ๋ ๋น๊ต์ ๊ตฌ์ฒด์ ์ธ ์ฅ๊ธฐ ๊ท์น๊น์ง ํจ๊ป ์๊ณ ์๋ ๊ตฌ์กฐ๊ฐ ๋์ด์. ํ์ฌ ๊ท๋ชจ์์๋ ๊ตฌํ์ ๋จ์ํ๊ฒ ๋ง๋๋ ์ฅ์ ๋ ์์ง๋ง, ์ถ์ ๊ธฐ๋ฌผ์ ์ฑ ์์ ์ด๋๊น์ง๋ก ๋ณผ์ง์ ๋ฐ๋ผ ์ด๋ฐ ์ง์์ ๊ณ์ ์์ ํ์ ์ ๋์ง ํ ๋ฒ ๋ ๊ณ ๋ฏผ ์ ๋๋ ํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค์.
์๋ฅผ ๋ค์ด ํ๊ณผ ๊ถ์ฑ์ ๋์ ์ฑ ์์ Palace ์ชฝ์ผ๋ก ์ฎ๊ธฐ๋ ๋ฐฉํฅ๋ ์์ ๊ฒ ๊ฐ์์. ๋ณ๊ฒฝํ์ง ์๋๋ค๋ฉด, palace์๊ฒ team์ ์ฃผ๊ณ ์ง์์ ๋ฐ๋ ๋ฉ์๋๊ฐ ์๋๊ฒ ๋ ์ฝ๊ธฐ ์ข์๋ณด์ ๋๋ค.
ํ๊ณผ ๊ถ์ฑ์ ๋งคํ ์ฑ
์์ Palace.of(Team)์ผ๋ก ์ด๋ํ์ต๋๋ค.
ownPalace()๋ Palace.of(team)์ ์์๋ง ํ๋ ํํ๋ก ๋จ์ํํ์ฌ,
AbstractPiece๊ฐ ๊ถ์ฑ ๊ท์น์ ์ธ๋ถ์ฌํญ์ ์ง์ ์์ง ์๋๋ก ๊ฐ์ ํ์ต๋๋ค.
| private final long gameId; | ||
|
|
||
| private JanggiGame(Board board) { | ||
| private JanggiGame(Board board, GameRepository gameRepository, long gameId) { |
There was a problem hiding this comment.
JanggiGame์ ์์ดํ๊ฐ ์๊ฐํ์๋ ๋๋ฉ์ธ์ธ๊ฐ์? ์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ธ๊ฐ์?
There was a problem hiding this comment.
JanggiGame์ ์์ดํ๊ฐ ์๊ฐํ์๋ ๋๋ฉ์ธ์ธ๊ฐ์? ์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ธ๊ฐ์?
JanggiGame์ ์ ํ๋ฆฌ์ผ์ด์
๊ณ์ธต์ผ๋ก ๋ณด๊ณ ์์ต๋๋ค.
๊ฒ์์ ํ๋ฆ ์ ์ด(play, progressTurn)์ ์
์ถ๋ ฅ(InputView, OutputView) ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๊ณ ์์ด,
์์ํ ๋๋ฉ์ธ ๋ก์ง๋ณด๋ค๋ ์ ์ค์ผ์ด์ค๋ฅผ ์กฐ์จํ๋ ์ฑ
์์ ๊ฐ๊น๋ค๊ณ ํ๋จํ์ต๋๋ค.
๋ค๋ง Board, GameRepository ๊ฐ์ ๋๋ฉ์ธ ๊ฐ์ฒด์ ์ง์ ์์กดํ๊ณ ์์ด ๊ฒฝ๊ณ๊ฐ ๋ช
ํํ์ง ์์ ๋ถ๋ถ์ด ์๋๋ฐ,
์ด ๋ถ๋ถ์ ๋ํด ์ด๋ป๊ฒ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข์์ง ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
There was a problem hiding this comment.
์ง๊ธ์ JanggiGame์ InputView, OutputView, GameRepository๊น์ง ํจ๊ป ์๊ณ ์์ด์ ์์ํ ๋๋ฉ์ธ ๊ฐ์ฒด๋ผ๊ณ ๋ณด๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ๊ทธ๋์ ์ง๊ธ ๊ตฌ์กฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ฒด๋ผ๊ณ ์ ๋ฆฌํ ์๋ ์๋ค๊ณ ์๊ฐํ๊ณ ํฌ๊ฒ ์ด๊ฒฌ์ ์์ต๋๋ค~
๋ค๋ง ๊ฐ์ธ์ ์ผ๋ก๋ ๊ฒ์ ์์ฒด๋ ๋๋ฉ์ธ์ด๋ผ๊ณ ์๊ฐํด์. ํด์ด ์ด๋ป๊ฒ ์งํ๋๋์ง, ์ธ์ ๊ฒ์์ด ์ข ๋ฃ๋๋์ง, ์ด๋์ด ์ฑ๊ณตํ์ ๋ ์ํ๊ฐ ์ด๋ป๊ฒ ๋ฐ๋๋์ง ๊ฐ์ ํ๋ฆ ์์ฒด๊ฐ ์ฅ๊ธฐ ๊ท์น์ ์ผ๋ถ๋๊น์. ๋จ์ํ ํ๋ฉด๊ณผ ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ๋ ์ ์ฐจ๋ผ๊ธฐ๋ณด๋ค ๊ฒ์์ด๋ผ๋ ๋๋ฉ์ธ์ด ์ค์ค๋ก ์ค๋ช ํด์ผ ํ๋ ์ํ ๋ณํ์ ๋ ๊ฐ๊น์ง ์๋์?
์๋ฅผ ๋ค์ด ์ดํ ์น ๋ฒ์ ๊น์ง ํจ๊ป ๊ณ ๋ คํ๋ค๊ณ ํ์ ๋, ์ ๋ ฅ์ ์ด๋ป๊ฒ ๋ฐ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์ง๋ ๋ถ๋ช ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ด ๋ฐ๋๋ ๋ฌธ์ ์ธ๋ฐ, ๊ฒ์์ ํ๋ฆ ์์ฒด๋ ๊ทธ๋๋ก ์ ์ง๋์ด์ผ ํ์์์. ๊ทธ๋ฐ๋ฐ ์ง๊ธ ๊ตฌ์กฐ๋ ๊ทธ ํ๋ฆ๊น์ง InputView, OutputView, Repository์ ํ ๊ฐ์ฒด ์์ ๋ฌถ์ฌ ์์ด์, ์ธํฐํ์ด์ค๊ฐ ๋ฐ๋๋ฉด ๊ฒฐ๊ตญ ์๋ก์ด ๊ฒ์ ํ๋ฆ ๊ฐ์ฒด๋ฅผ ๋ค์ ๋ง๋ค๊ฒ ๋ ๊ฐ๋ฅ์ฑ์ด ์ปค ๋ณด์ฌ์. ๊ทธ๋์ ์ ๊ธฐ์ค์์๋ ์ฝ์์ด๋ ์น์ด๋ ์๊ด์์ด ๊ณตํต์ผ๋ก ์ ์ง๋์ด์ผ ํ๋ ํด ์งํ, ์ข ๋ฃ ํ๋จ, ์ํ ๋ณํ ๊ฐ์ ๊ฒ์ ๊ท์น์ ๋๋ฉ์ธ์ ๋จ๊ณ , ์ ์ถ๋ ฅ๊ณผ ์ ์ฅ/๋ณต๊ตฌ orchestration๋ง ๋ฐ๊นฅ ๊ณ์ธต์ด ๋งก์์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
|
|
||
| @Override | ||
| public long save(Board board, Team currentTeam) { | ||
| try (Connection conn = DBConnector.getConnection()) { |
There was a problem hiding this comment.
jdbc์ฌ์ฉ๊ณผ ํ๋์ transaction์ ๋ณด์ฅํ ์ ๐
- DB ์ค๊ณ โ ํธ๋์ญ์ ๋จ์ ๋ฐ ์ ๋ฐ์ดํธ ๋ฐฉ์
- ๊ฒ์ ์ด๋ ฅ ๊ด๋ฆฌ โ ํ์ฌ ์ํ๋ง ์ ์ฅ vs ์ด๋ ๊ธฐ๋ก ๋์
ํ์ฌ ๋ฏธ์ ๊ท๋ชจ์์๋ delete + insert๋ ์ถฉ๋ถํ ํฉ๋ฆฌ์ ์ธ ์ ํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฑ๋ฅ๋ณด๋ค ๊ตฌํ ๋จ์์ฑ๊ณผ ์ํ ์ผ๊ด์ฑ์ด ์ง๊ธ์ ๋ ์ค์ํด๋ณด์ด๊ณ , ์ค์ ๋ก ๋ณ๊ฒฝ๋ ๋ ์นธ๋ง updateํ๋ ๋ฐฉ์์ ๋ ํจ์จ์ ์ผ ์๋ ์์ด๋ ์ด๋, ์บก์ฒ, ๋น์นธ ๋ณต๊ตฌ๊น์ง ํจ๊ป ์ธ์ฌํ๊ฒ ๊ด๋ฆฌํด์ผ ํด์ ๋ณต์ก๋๊ฐ ์ปค์ง๋ค๊ณ ์๊ฐํด์. ํ์ฌ ๊ท๋ชจ์์๋ ์ฑ๋ฅ ๋น์ฉ๋ ํฌ์ง ์์ ๋ณด์ฌ์, ์ง๊ธ ์ ํ์ด ๋ ์ ์ ํ๋ค๊ณ ๋ด ๋๋ค.
๋ค๋ง ์ค์ ์๋น์ค๋ผ๊ณ ๊ฐ์ ํ๋ฉด ์ฑ๋ฅ๋ ํจ๊ป ๊ณ ๋ คํด์ผ ํด์. ๋งค ํด๋ง๋ค 90๊ฐ ๊ธฐ๋ฌผ์ ์ ๋ถ delete + insertํ๋ ๋ฐฉ์์ ๊ตฌํ์ ๋จ์ํ์ง๋ง, ๊ฒ์ ์๊ฐ ๋ง์์ง์๋ก ๋ถํ์ํ ์ฐ๊ธฐ ๋น์ฉ์ด ์ปค์ง๊ธฐ๋ ํ๊ณ , ์ด๋ ํ์คํ ๋ฆฌ๋ฅผ ๋จ๊ธฐ๊ฑฐ๋ ๋ฌด๋ฅด๊ธฐ ๊ฐ์ ๊ธฐ๋ฅ๊น์ง ๊ณ ๋ คํ๋ค๋ฉด ์ ์ฒด ์ํ๋ฅผ ๋งค๋ฒ ๊ต์ฒดํ๊ธฐ๋ณด๋ค๋ ๋ณ๊ฒฝ๋ ์นธ๋ง ๊ฐฑ์ ํ๊ฑฐ๋ ์ด๋ ๊ธฐ๋ก์ ๋ณ๋๋ก ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๊ฐ ๋ ์ข์๋ณด์ ๋๋ค.
๊ฒฐ๊ตญ ์ด๋ฐ ๋ถ๋ถ์ ํญ์ ํ์ฌ ๊ท๋ชจ์ ์๊ตฌ์ฌํญ์ ํจ๊ป ๊ณ ๋ คํด์ ๋ณธ์ธ์ด ์ ํํ๋ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํด์
There was a problem hiding this comment.
jdbc์ฌ์ฉ๊ณผ ํ๋์ transaction์ ๋ณด์ฅํ ์ ๐
- DB ์ค๊ณ โ ํธ๋์ญ์ ๋จ์ ๋ฐ ์ ๋ฐ์ดํธ ๋ฐฉ์
- ๊ฒ์ ์ด๋ ฅ ๊ด๋ฆฌ โ ํ์ฌ ์ํ๋ง ์ ์ฅ vs ์ด๋ ๊ธฐ๋ก ๋์
ํ์ฌ ๋ฏธ์ ๊ท๋ชจ์์๋ delete + insert๋ ์ถฉ๋ถํ ํฉ๋ฆฌ์ ์ธ ์ ํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฑ๋ฅ๋ณด๋ค ๊ตฌํ ๋จ์์ฑ๊ณผ ์ํ ์ผ๊ด์ฑ์ด ์ง๊ธ์ ๋ ์ค์ํด๋ณด์ด๊ณ , ์ค์ ๋ก ๋ณ๊ฒฝ๋ ๋ ์นธ๋ง updateํ๋ ๋ฐฉ์์ ๋ ํจ์จ์ ์ผ ์๋ ์์ด๋ ์ด๋, ์บก์ฒ, ๋น์นธ ๋ณต๊ตฌ๊น์ง ํจ๊ป ์ธ์ฌํ๊ฒ ๊ด๋ฆฌํด์ผ ํด์ ๋ณต์ก๋๊ฐ ์ปค์ง๋ค๊ณ ์๊ฐํด์. ํ์ฌ ๊ท๋ชจ์์๋ ์ฑ๋ฅ ๋น์ฉ๋ ํฌ์ง ์์ ๋ณด์ฌ์, ์ง๊ธ ์ ํ์ด ๋ ์ ์ ํ๋ค๊ณ ๋ด ๋๋ค.
๋ค๋ง ์ค์ ์๋น์ค๋ผ๊ณ ๊ฐ์ ํ๋ฉด ์ฑ๋ฅ๋ ํจ๊ป ๊ณ ๋ คํด์ผ ํด์. ๋งค ํด๋ง๋ค 90๊ฐ ๊ธฐ๋ฌผ์ ์ ๋ถ delete + insertํ๋ ๋ฐฉ์์ ๊ตฌํ์ ๋จ์ํ์ง๋ง, ๊ฒ์ ์๊ฐ ๋ง์์ง์๋ก ๋ถํ์ํ ์ฐ๊ธฐ ๋น์ฉ์ด ์ปค์ง๊ธฐ๋ ํ๊ณ , ์ด๋ ํ์คํ ๋ฆฌ๋ฅผ ๋จ๊ธฐ๊ฑฐ๋ ๋ฌด๋ฅด๊ธฐ ๊ฐ์ ๊ธฐ๋ฅ๊น์ง ๊ณ ๋ คํ๋ค๋ฉด ์ ์ฒด ์ํ๋ฅผ ๋งค๋ฒ ๊ต์ฒดํ๊ธฐ๋ณด๋ค๋ ๋ณ๊ฒฝ๋ ์นธ๋ง ๊ฐฑ์ ํ๊ฑฐ๋ ์ด๋ ๊ธฐ๋ก์ ๋ณ๋๋ก ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๊ฐ ๋ ์ข์๋ณด์ ๋๋ค.
๊ฒฐ๊ตญ ์ด๋ฐ ๋ถ๋ถ์ ํญ์ ํ์ฌ ๊ท๋ชจ์ ์๊ตฌ์ฌํญ์ ํจ๊ป ๊ณ ๋ คํด์ ๋ณธ์ธ์ด ์ ํํ๋ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํด์
ํ์ฌ ๊ท๋ชจ์์ delete + insert ๋ฐฉ์์ด ์ ์ ํ๋ค๋ ์ ๋์ํฉ๋๋ค.
์ดํ ์ด๋ ํ์คํ ๋ฆฌ๋ ๋ฌด๋ฅด๊ธฐ ๊ธฐ๋ฅ์ด ํ์ํด์ง๋ ์์ ์ movement ํ
์ด๋ธ ๋์
์ ๊ณ ๋ คํ๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
| import java.util.Map; | ||
| import java.util.Optional; | ||
|
|
||
| public class GameRepositoryImpl implements GameRepository { |
There was a problem hiding this comment.
- Repository ํจํด โ DAO ์์ด ๊ตฌํ์ฒด์์ ์ง์ JDBC ์ฒ๋ฆฌ
Dao์ repository์ ์ฐจ์ด๊ฐ ๋ญ๊ฐ์? ์ฐจ์ด๋ฅผ ๋ช ํํ ์๊ณ ์ค๊ณํ๋ค๋ฉด ์ด๊ฒฌ ์์ต๋๋ค ๐
There was a problem hiding this comment.
- Repository ํจํด โ DAO ์์ด ๊ตฌํ์ฒด์์ ์ง์ JDBC ์ฒ๋ฆฌ
Dao์ repository์ ์ฐจ์ด๊ฐ ๋ญ๊ฐ์? ์ฐจ์ด๋ฅผ ๋ช ํํ ์๊ณ ์ค๊ณํ๋ค๋ฉด ์ด๊ฒฌ ์์ต๋๋ค ๐
DAO๋ ํน์ ํ
์ด๋ธ ๋จ์์ CRUD์ ์ง์คํ๋ฉฐ ResultSet ๊ฐ์ DB ๊ตฌํ ์ธ๋ถ์ฌํญ์ ์ง์ ๋ค๋ฃจ๋ ๋ฐ๋ฉด,
Repository๋ ๋๋ฉ์ธ ๊ฐ์ฒด ๋จ์๋ก ์ถ์ํํ์ฌ ์ ์ฅ์์ ๊ตฌํ ๋ฐฉ์์ ์จ๊น๋๋ค.
ํ์ฌ GameRepositoryImpl์ ์ธํฐํ์ด์ค(GameRepository)๋ก ๋๋ฉ์ธ๊ณผ ๊ฒฝ๊ณ๋ฅผ ๋๋๊ณ ,
๋ด๋ถ์์ JDBC๋ฅผ ์ง์ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ์
๋๋ค. DAO๋ฅผ ๋ณ๋๋ก ๋๋ฉด ๊ณ์ธต์ด ๋ ๋ช
ํํด์ง์ง๋ง,
ํ์ฌ ๋ฏธ์
๊ท๋ชจ์์๋ ๋จ์ผ ๊ตฌํ์ฒด ์์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ณต์ก๋ ๋๋น ์ค์ต์ด ํฌ์ง ์๋ค๊ณ ํ๋จํด
Repository ๊ตฌํ์ฒด๊ฐ JDBC๊น์ง ๋ด๋นํ๋๋ก ํ์ต๋๋ค.
| throw new IllegalArgumentException("[ERROR] ์ ์ ์๋ ๊ธฐ๋ฌผ ํ์ ์ ๋๋ค: " + type); | ||
| } | ||
|
|
||
| public static String toTeamString(Piece piece) { |
There was a problem hiding this comment.
- EmptyPiece์ ํ ์ ์ฅ ๋ฐฉ์
๋ ๋ฐฉ์ ์ค์ ์์ดํ๊ฐ ์๊ฐํ ์ฅ๋จ์ ์ ๋ฌด์์ด๊ณ ์ ํ์ฌ์ ์ค๋ ์ท ๋ฐฉ์์ ์ ํํ๋์ง ์๋ ค์ฃผ์ธ์
There was a problem hiding this comment.
- EmptyPiece์ ํ ์ ์ฅ ๋ฐฉ์
๋ ๋ฐฉ์ ์ค์ ์์ดํ๊ฐ ์๊ฐํ ์ฅ๋จ์ ์ ๋ฌด์์ด๊ณ ์ ํ์ฌ์ ์ค๋ ์ท ๋ฐฉ์์ ์ ํํ๋์ง ์๋ ค์ฃผ์ธ์
๋ ๋ฐฉ์์ ์ฅ๋จ์ ์ ๋น๊ตํ์ ๋, ํฌ์ ํํ(์ค์ ๊ธฐ๋ฌผ๋ง ์ ์ฅ) ๋ฐฉ์์ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์์ง๋ง ๋ณต์ ์ ์๋ ์นธ์ EmptyPiece๋ก ์ฑ์ฐ๋ ๋ณ๋ ๋ก์ง์ด ํ์ํ๊ณ ,
null ์ฒดํฌ๊ฐ ๊ณณ๊ณณ์ ์๊ธธ ์ ์์ด EmptyPiece๋ผ๋ Null Object ํจํด์ ์ฅ์ ์ด ํฌ์๋๋ค๊ณ ํ๋จํ์ต๋๋ค.
ํ์ฌ ๋ฐฉ์(์ ์ฒด ์ ์ฅ)์ 90์นธ์ ๋ชจ๋ ์ ์ฅํ๋ ๋น์ฉ์ด ์์ง๋ง,
๋ณต์ ์ ํญ์ ์์ ํ ๋ณด๋ ์ํ๋ฅผ ๋ณด์ฅํ๊ณ EmptyPiece์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ด
ํ์ฌ ๊ท๋ชจ์์๋ ๋ ์ ํฉํ๋ค๊ณ ํ๋จํด ์ ํํ์ต๋๋ค.
- canMoveOnDiagonalInAnyPalace โ isDiagonalMove๋ก ๋ค์ด๋ฐ ๊ฐ์ - getDiagonalPathInAnyPalace โ getDiagonalPath๋ก ๋ค์ด๋ฐ ๊ฐ์ - AbstractPiece์ validatePalaceMove() ์ถ์ถ - General/Guard์ ์ค๋ณต๋ ๊ถ์ฑ ์ด๋ ๊ฒ์ฆ ๋ก์ง ์ ๊ฑฐ
โฆlegalStateException ๋ณ๊ฒฝ
- ScoreResult ๋๋ฉ์ธ ๊ฐ์ฒด ์ถ๊ฐ (hanScore, choScore, ์นํจ ํ์ ) - Board.calculateScoreResult()๋ก ๋ ํ ์ ์๋ฅผ ํ๋ฒ์ ๋ฐํ - JanggiGame์ ์นํจ ํ์ ๋ก์ง์ ScoreResult์ ์์
์๋
ํ์ธ์ ์ฌ! ๊ผผ๊ผผํ ๋ฆฌ๋ทฐ ๊ฐ์ฌํฉ๋๋ค ๐ |
syoun602
left a comment
There was a problem hiding this comment.
์๋
ํ์ธ์ ์์ดํ~
์ด๋ฒ ์ฌ์ดํด2๋ ์ถฉ๋ถํ ์ํด์ฃผ์ ๊ฒ ๊ฐ์์ ์ด๋ง ๋จธ์งํ๊ฒ ์ต๋๋ค!
์ด๋ ค์ด ์ฅ๊ธฐ ๋ฏธ์
ํ์๋๋ผ ์๊ณ ๋ง์ผ์
จ์ด์ ๐
๋ช ๊ฐ์ง ๊ณ ๋ฏผํด๋ณผ ๋ถ๋ถ์ ๋จ๊ฒจ๋๋ ธ๋๋ฐ, ํน์๋ ๋ ๊ถ๊ธํ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ธ์ ๋ DM ์ฃผ์ธ์
๋ ๋ฒจ 1 ๊ณ ์ํ์
จ๊ณ ๋ค์ ์น ๋ฏธ์
๋ค๋ ํ์ดํ
์
๋๋ค~
| .filter(piece -> piece.isSame(team)) | ||
| .mapToInt(piece -> piece.getType().getScore()) | ||
| .sum(); | ||
| Score score = Score.of(sum); |
There was a problem hiding this comment.
์ฐ์ ๊ฒ์ฆ์ ๋ํด์๋ ๋ง์ํ์ ๊ฒ์ฒ๋ผ ์์ฑ ๊ฒฝ๋ก๋ฅผ ํต์ ํ๊ณ ์ถ๋๋ผ๋ ๊ฒฐ๊ตญ ์ฃผ์์ฑ์์์ ํญ์ ๊ฒ์ฆํด์ผ ๋๋ค๊ณ ์๊ฐํด์. ์ฃผ์์ฑ์๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋๋ผ๋ ํญ์ ๊ฑฐ์น๊ฒ ๋๋ ๋ง์ง๋ง ๋ณดํธ ์ฅ์น๋๊น์. ๊ทธ๋ฆฌ๊ณ ์บ์ฑ์ ์ง๊ธ ์ฌ์ฉํ๊ณ ์์ง ์์๋ฐ, ๊ทธ๊ฑธ ๊ณ ๋ คํ๋ค๋๊ฒ ํฌ๊ฒ ์๋ฟ์ง๋ ์๋ค์.
๋ง์ง๋ง์ผ๋ก of์ from์ ๊ธฐ์ค ์์ฒด๋ ์ถฉ๋ถํ ์ดํด๋์ง๋ง, ํ์ฌ ์ฝ๋์์ ์ด ์ด๋ฆ๋ค์ด ์ ๋ง ์์ฑ ์๋๋ฅผ ์ ๋๋ฌ๋ด๊ณ ์๋์ง๋ ํ ๋ฒ ๋ ์๊ฐํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ฌด๋ถ๋ณํ๊ฒ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ๋๋ฆฌ๊ธฐ๋ณด๋ค๋ ํ๋์ ์์ ํ ์ฃผ์์ฑ์๋ฅผ ๋๊ณ ํ์ํ ๊ฒฝ์ฐ์๋ง ์๋ฏธ ์๋ ๋ถ์์ฑ์๋ ์ ์ ํฉํฐ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ ์ ํธํฉ๋๋ค. ์ง๊ธ Score๋ง ๋ดค์๋ ์ ์ ํฉํฐ๋ฆฌ์ ์ด๋ค ์ฅ์ ์ด ๋ น์๋ค์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋จ์ํ ์ดํํฐ๋ธ ์๋ฐ์์ ์ ์ ํฉํฐ๋ฆฌ๋ฅผ ์ ํธํ๋ค๊ณ ํด์ ์ผ๊ด์ ์ผ๋ก ์ ์ฉํ๊ธฐ๋ณด๋ค๋ ์ ์ด ๊ฒฝ์ฐ์ ์์ฑ์๋ณด๋ค ์ ์ ํฉํฐ๋ฆฌ๊ฐ ๋ ์ ์ ํ์ง๊น์ง ํจ๊ป ์ค๋ช ๊ฐ๋ฅํด์ผ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํด์. ์ดํํฐ๋ธ ์๋ฐ์์ ๋งํ๋ ์ ์ ํฉํฐ๋ฆฌ๋ ํญ์ ์์ฑ์๋ณด๋ค ์ฐ์ํ๋ค๋ ์ทจ์ง๋ผ๊ธฐ๋ณด๋ค, ์ด๋ฆ์ ๋ถ์ฌํ ์ ์๊ณ ์์ฑ ๋ฐฉ์์ ํต์ ํ ์ ์๋ ๋ฑ ๋ถ๋ช ํ ์ด์ ์ด ์์ ๋ ์ ํ์ง๋ก ๊ณ ๋ คํ๋ผ๋ ์๋ฏธ๋ผ๊ณ ์๊ฐํด์.
| private final long gameId; | ||
|
|
||
| private JanggiGame(Board board) { | ||
| private JanggiGame(Board board, GameRepository gameRepository, long gameId) { |
There was a problem hiding this comment.
์ง๊ธ์ JanggiGame์ InputView, OutputView, GameRepository๊น์ง ํจ๊ป ์๊ณ ์์ด์ ์์ํ ๋๋ฉ์ธ ๊ฐ์ฒด๋ผ๊ณ ๋ณด๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ๊ทธ๋์ ์ง๊ธ ๊ตฌ์กฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ฒด๋ผ๊ณ ์ ๋ฆฌํ ์๋ ์๋ค๊ณ ์๊ฐํ๊ณ ํฌ๊ฒ ์ด๊ฒฌ์ ์์ต๋๋ค~
๋ค๋ง ๊ฐ์ธ์ ์ผ๋ก๋ ๊ฒ์ ์์ฒด๋ ๋๋ฉ์ธ์ด๋ผ๊ณ ์๊ฐํด์. ํด์ด ์ด๋ป๊ฒ ์งํ๋๋์ง, ์ธ์ ๊ฒ์์ด ์ข ๋ฃ๋๋์ง, ์ด๋์ด ์ฑ๊ณตํ์ ๋ ์ํ๊ฐ ์ด๋ป๊ฒ ๋ฐ๋๋์ง ๊ฐ์ ํ๋ฆ ์์ฒด๊ฐ ์ฅ๊ธฐ ๊ท์น์ ์ผ๋ถ๋๊น์. ๋จ์ํ ํ๋ฉด๊ณผ ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ๋ ์ ์ฐจ๋ผ๊ธฐ๋ณด๋ค ๊ฒ์์ด๋ผ๋ ๋๋ฉ์ธ์ด ์ค์ค๋ก ์ค๋ช ํด์ผ ํ๋ ์ํ ๋ณํ์ ๋ ๊ฐ๊น์ง ์๋์?
์๋ฅผ ๋ค์ด ์ดํ ์น ๋ฒ์ ๊น์ง ํจ๊ป ๊ณ ๋ คํ๋ค๊ณ ํ์ ๋, ์ ๋ ฅ์ ์ด๋ป๊ฒ ๋ฐ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์ง๋ ๋ถ๋ช ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ด ๋ฐ๋๋ ๋ฌธ์ ์ธ๋ฐ, ๊ฒ์์ ํ๋ฆ ์์ฒด๋ ๊ทธ๋๋ก ์ ์ง๋์ด์ผ ํ์์์. ๊ทธ๋ฐ๋ฐ ์ง๊ธ ๊ตฌ์กฐ๋ ๊ทธ ํ๋ฆ๊น์ง InputView, OutputView, Repository์ ํ ๊ฐ์ฒด ์์ ๋ฌถ์ฌ ์์ด์, ์ธํฐํ์ด์ค๊ฐ ๋ฐ๋๋ฉด ๊ฒฐ๊ตญ ์๋ก์ด ๊ฒ์ ํ๋ฆ ๊ฐ์ฒด๋ฅผ ๋ค์ ๋ง๋ค๊ฒ ๋ ๊ฐ๋ฅ์ฑ์ด ์ปค ๋ณด์ฌ์. ๊ทธ๋์ ์ ๊ธฐ์ค์์๋ ์ฝ์์ด๋ ์น์ด๋ ์๊ด์์ด ๊ณตํต์ผ๋ก ์ ์ง๋์ด์ผ ํ๋ ํด ์งํ, ์ข ๋ฃ ํ๋จ, ์ํ ๋ณํ ๊ฐ์ ๊ฒ์ ๊ท์น์ ๋๋ฉ์ธ์ ๋จ๊ณ , ์ ์ถ๋ ฅ๊ณผ ์ ์ฅ/๋ณต๊ตฌ orchestration๋ง ๋ฐ๊นฅ ๊ณ์ธต์ด ๋งก์์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
| private boolean isCornerPosition(Position position) { | ||
| int row = position.getRowValue(); | ||
| int col = position.getColumnValue(); | ||
| return (row == topLeft.getRowValue() || row == bottomRight.getRowValue()) |
There was a problem hiding this comment.
hasSameRowValue ๋ฑ์ฒ๋ผ ๊ฐ์ฒด์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ ์๋ค
| return List.of(center); | ||
| } | ||
|
|
||
| public static boolean isDiagonalMove(Position from, Position to) { |
There was a problem hiding this comment.
์ง๊ธ ์ด๋ฐ static ๋ฉ์๋๋ isDiagonalMove()์ฒ๋ผ ์์ชฝ ๊ถ์ฑ์ ๋ชจ๋ ํ์ธํด์ผ ํ๋๋ฐ ๋จผ์ ์ด๋ ์์ ์์น๊ฐ ์ด๋ ๊ถ์ฑ์ ์ํ๋์ง ์ฐพ๊ณ ํด๋น ๊ถ์ฑ ๊ฐ์ฒด์๊ฒ ํ๋จ์ ์์ํ ์๋ ์๊ฒ ๋ค์. ๊ฐ์ฒด๋ก ๋ง๋ ๋งํผ ์ ํธ์ฑ ๋ฉ์๋๋ฅผ ์ ๊ฑฐํด๋ณผ ์๋ ์์ ๊ฒ ๊ฐ์์
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
๊ถ์ฑ ๊ท์น ์ค๊ณ์ ๋๋ฉ์ธ๊ณผ ์ธํ๋ผ์ ๊ฒฝ๊ณ ๋ฅผ ์ค์ ์ ์ผ๋ก ํผ๋๋ฐฑํด ์ฃผ์๋ฉด ์ข๊ฒ ์ต๋๋ค.
๊ถ์ฑ ๊ท์น์ ๋์ ํ๋ฉด์ ๊ธฐ๋ฌผ๊ณผ ๊ถ์ฑ์ ์ฑ ์์ ์ด๋ป๊ฒ ๋๋์ง,
DB๋ฅผ ์ฒ์ ์ฐ๋ํ๋ฉด์ ๋๋ฉ์ธ์ด DB๋ฅผ ๋ชจ๋ฅด๊ฒ ํ๋ ค๋ฉด ์ด๋์ ์ด๋ป๊ฒ ๊ฒฝ๊ณ๋ฅผ ๊ทธ์ด์ผ ํ๋์ง ๊ณ์ ๊ณ ๋ฏผํ์ต๋๋ค.
1. ๊ถ์ฑ(Palace) ๋๋ฉ์ธ ๊ฐ์ฒด ์ค๊ณ
๊ถ์ฑ ๊ท์น์ ๊ตฌํํ๋ฉด์
Palace๋ฅผ ๋ณ๋ ๋๋ฉ์ธ ๊ฐ์ฒด๋ก ๋ถ๋ฆฌํ์ต๋๋ค.General,Guard๋AbstractPiece.ownPalace()๋ฅผ ํตํด ์์ ์ ํ ๊ถ์ฑ์ ์ฐธ์กฐํ๊ณ ,Chariot,Cannon,Soldier๋Palace.isDiagonalMove()๋ก ์์ชฝ ๊ถ์ฑ์ ๋ชจ๋ ํ์ธํฉ๋๋ค.๊ณ ๋ฏผํ๋ ์ ์
AbstractPiece๊ฐPalace๋ฅผ ์์์ผ ํ๋๊ฐ ์ ๋๋ค.๊ธฐ๋ฌผ์ด ์์ ์ ๊ถ์ฑ์ ์ง์ ์ฐธ์กฐํ๋ ๊ฒ ์์ฐ์ค๋ฌ์ด์ง, ์๋๋ฉด
Board๊ฐ ๊ถ์ฑ ๊ท์น์ ํ๋จํด์ผ ํ๋์ง ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.2. DB ์ค๊ณ โ ํธ๋์ญ์ ๋จ์ ๋ฐ ์ ๋ฐ์ดํธ ๋ฐฉ์
๊ฒ์ ์ ์ฅ ์
janggi_gameINSERT์pieceINSERT(90๊ฐ)๋ฅผ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์์ต๋๋ค.๋งค ํด๋ง๋ค
update()์์๋updateTurn+deletePieces+savePieces๋ฅผ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์์ต๋๋ค.๊ณ ๋ฏผํ๋ ์ ์ ๋งค ํด๋ง๋ค 90๊ฐ ๊ธฐ๋ฌผ์ DELETE + INSERTํ๋ ๋ฐฉ์์ด ์ ์ ํ๊ฐ์ ๋๋ค.
ํ์ฌ๋ ๊ตฌํ ๋จ์์ฑ์ ์ํด ์ ์ฒด๋ฅผ ๊ต์ฒดํ๋ ๋ฐฉ์์ ํํ๋๋ฐ,
๊ฒ์์ด ์ฌ๋ฌ ๊ฐ ๋์์ ๋์๊ฐ๋ ์ํฉ์ ๊ณ ๋ คํ๋ฉด ๋ณ๊ฒฝ๋ ๊ธฐ๋ฌผ(from, to 2๊ฐ)๋ง UPDATEํ๋ ๋ฐฉ์์ด ๋์์ง
ํธ๋ ์ด๋์คํ์ ๋ํ ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
3. Repository ํจํด โ DAO ์์ด ๊ตฌํ์ฒด์์ ์ง์ JDBC ์ฒ๋ฆฌ
DAO ๊ณ์ธต ์์ด
GameRepositoryImpl์ด JDBC ์ฒ๋ฆฌ๊น์ง ๋ด๋นํ๋๋ก ํ์ต๋๋ค.๋ฏธ์ ๊ท๋ชจ์์๋ DAO๋ฅผ ๋ณ๋๋ก ๋๋ ๊ฒ ๊ณผํ๋ค๊ณ ํ๋จํ๋๋ฐ, ์ด ํ๋จ์ด ํฉ๋ฆฌ์ ์ธ์ง ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
4. EmptyPiece์ ํ ์ ์ฅ ๋ฐฉ์
DB์ ๊ธฐ๋ฌผ์ ์ ์ฅํ ๋
EmptyPiece๋ ํ์ด ์์ด์"EMPTY"๋ผ๋ ํน์๊ฐ์ ์ ์ฅํฉ๋๋ค.๋ณต์ ์์๋
type์ดEMPTY๋ฉดteam๊ฐ์ ๋ฌด์ํ๊ณEmptyPiece๋ฅผ ๋ฐํํฉ๋๋ค.์ด ๋ฐฉ์ ๋์
EmptyPiece๋ฅผ ์์ ์ ์ฅํ์ง ์๊ณ ์๋ ์นธ์ ๋น ์นธ์ผ๋ก ์ฒ๋ฆฌํ๋ ํฌ์ ํํ ๋ฐฉ์๋ ๊ณ ๋ฏผํ๋๋ฐ,ํ์ฌ ๋ฐฉ์์ ์ฅ๋จ์ ์ ๋ํด ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
5. ์ ์ ๊ณ์ฐ โ ๋ค(ํธ๋์บก) ์ ์ฉ ๋ฐฉ์
์ด๋๋ผ๊ฐ ๋จผ์ ๋๋ ๊ท์น์ ๋ฐ๋ผ ํ๋๋ผ ์ ์์ 1.5์ ๋ค์ ์ ์ฉํ์ต๋๋ค.
Board.calculateScore()์์ ํ์ด HAN์ด๋ฉด ์๋์ผ๋ก ๋ค์ ์ ์ฉํฉ๋๋ค.๋ค ์ ์ฉ ์ฑ ์์ด
Score์ ์๋ ๊ฒ ๋ง๋์ง, ์๋๋ฉด ํธ์ถ๋ถ์์ ๋ช ์์ ์ผ๋ก ์ ์ฉํ๋ ๊ฒ ๋์์ง ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.6. ๊ฒ์ ์ด๋ ฅ ๊ด๋ฆฌ โ ํ์ฌ ์ํ๋ง ์ ์ฅ vs ์ด๋ ๊ธฐ๋ก ๋์
ํ์ฌ๋ ๋งค ํด๋ง๋ค ๋ณด๋์ ํ์ฌ ์ํ๋ฅผ ๋ฎ์ด์๋๋ค. ๋๋ฌธ์ ๊ฒ์ ์ค ๋น์ ์ ์ข ๋ฃ ์
๋ง์ง๋ง ์ ์ฅ ์ด์ ์ํ๋ก ๋์๊ฐ ๋ฐฉ๋ฒ์ด ์๊ณ , ๋ฌด๋ฅด๊ธฐ ๊ฐ์ ๊ธฐ๋ฅ ์ถ๊ฐ๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ ๊ธฐ๋ก์ ๋์ ํ๋
movementํ ์ด๋ธ์ ์ถ๊ฐํ๋ ๋ฐฉ์๋ ๊ณ ๋ฏผํ์ต๋๋ค.์ด ๊ฒฝ์ฐ ๋ณต์ ์ ์ด๊ธฐ ๋ฐฐ์น์์ ์ด๋ ๊ธฐ๋ก์ ์์๋๋ก ์ฌ์ํด์ผ ํ๋๋ฐ,
ํ์ฌ ๋ฐฉ์(์ค๋ ์ท)๊ณผ ์ด๋ ๊ธฐ๋ก ๋์ ๋ฐฉ์์ ํธ๋ ์ด๋์คํ๊ฐ ๊ถ๊ธํฉ๋๋ค.
7. FakeGameRepository์ ์ค์ DB ํ ์คํธ์ ๊ดด๋ฆฌ
FakeGameRepository๋Board๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ์ ์ฅํ๋ ๋ฐ๋ฉด,์ค์
GameRepositoryImpl์ ์ง๋ ฌํ(๋๋ฉ์ธ โ DB) + ์ญ์ง๋ ฌํ(DB โ ๋๋ฉ์ธ) ๊ณผ์ ์ด ์์ต๋๋ค.์ด ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ฒ๊ทธ๋ฅผ
FakeGameRepository๋ก๋ ์ก์ ์ ์์ต๋๋ค.์ค์ DB ์ฐ๋ ํ ์คํธ(ํตํฉ ํ ์คํธ)์ Fake ํ ์คํธ์ ์ ์ ํ ๊ท ํ์ ์ด๋ป๊ฒ ์ก์์ผ ํ๋์ง,
๊ทธ๋ฆฌ๊ณ ํ์ฌ ๋ฏธ์ ์์ค์์ ํตํฉ ํ ์คํธ๊น์ง ์์ฑํ๋ ๊ฒ ์ ์ ํ์ง ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
8. DB ์ฐ๊ฒฐ ๋ฐฉ์ โ ๋งค ํธ๋์ญ์ ๋ง๋ค ์ Connection ์์ฑ
ํ์ฌ
DBConnector.getConnection()์ด ๋งค ํธ๋์ญ์ ๋ง๋ค ์ ์ปค๋ฅ์ ์ ์์ฑํฉ๋๋ค.์ค์ ์๋น์ค์์๋ ์ปค๋ฅ์ ์์ฑ ๋น์ฉ์ด ๋์ HikariCP ๊ฐ์ ์ปค๋ฅ์ ํ์ ์ฌ์ฉํ๋๋ฐ,
ํ์ฌ ๋ฏธ์ ์์ค์์ ์ปค๋ฅ์ ํ ๋์ ์ด ํ์ํ์ง, ์๋๋ฉด ํ์ฌ ๋ฐฉ์์ผ๋ก ์ถฉ๋ถํ์ง ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.