[๐ ์ฌ์ดํด2 - ๋ฏธ์ (๊ธฐ๋ฌผ ํ์ฅ + DB ์ ์ฉ)] ๋ฃจ๋ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#351
[๐ ์ฌ์ดํด2 - ๋ฏธ์
(๊ธฐ๋ฌผ ํ์ฅ + DB ์ ์ฉ)] ๋ฃจ๋ ๋ฏธ์
์ ์ถํฉ๋๋ค.#351Seonwu-K wants to merge 22 commits intowoowacourse:seonwu-kfrom
Conversation
| this.pieceScorePolicy = pieceScorePolicy; | ||
| } | ||
|
|
||
| public PieceScore calculate(Board board) { |
There was a problem hiding this comment.
์ ์ ๊ท์น์ ๊ณ์ฐ๊ณผ ์ ์ฑ ์ ๋ถ๋ฆฌํ์ง๋ง, ์ฌ์ ํ Board์์ ๋ชฉ๋ก์ ๊บผ๋ด๊ณ PieceType์ ๊ธฐ์ค์ผ๋ก ์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด ์ ๋ ๋ถ๋ฆฌ๋ ์ ์ ํ์ง, ๋ ๊ฐ์ฒด์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ชฝ์ด ๋์์ง ๊ถ๊ธํฉ๋๋ค.
| import strategy.move.RookMoveStrategy; | ||
|
|
||
| public class Piece { | ||
| private static final PalaceRouteGenerator PALACE_ROUTE_GENERATOR = new PalaceRouteGenerator(); |
There was a problem hiding this comment.
๊ถ์ฑ ๊ท์น์ Piece๊ฐ PalaceRouteGenerator๋ฅผ ๊ฐ์ง๊ณ ํ๋ ฅํ๋๋ก ๊ตฌํํด๋ดค์ต๋๋ค.
์ด ํ๋จ์ ์ ์ ํ์ง ๊ถ๊ธํฉ๋๋ค.
There was a problem hiding this comment.
๊ถ์ฑ ์ด๋๋ ๊ฒฐ๊ตญ ๊ธฐ๋ฌผ์ ์ด๋ ๊ท์น์ด๋ Piece ์ ์๋ ๊ฒ์ด ์ ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์ง๋ง ์ง๊ธ Piece๊ฐ "์ด๋ค ๊ธฐ๋ฌผ์ ์ ๋ต์ผ๋ก, ์ด๋ค ๊ธฐ๋ฌผ์ Palace๋ก"๋ฅผ ์ง์ ํ๋จํ๋ ์กฐ๊ฑด ๋ถ๊ธฐ์ ์ฑ ์๊น์ง ์ง์ด์ง๊ณ ์์ต๋๋ค.
KING/GUARD๋ ์์ ๋ง์ MoveStrategy๋ฅผ ๊ฐ๋๋ก ํ๋ ๊ฑด ์ด๋จ๊น์? Optional์ ํ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ํฐํจํด์ด๋ผ, ์ด๋ถ๋ถ๋ ๊ฐ์ ์ด ๋ ๊ฒ. ใ ใ . ๋คใ .
| this.newGameFactory = newGameFactory; | ||
| } | ||
|
|
||
| public void run() { |
There was a problem hiding this comment.
๊ฒ์ ํ๋ฆ ์ ์ฒด์์๋ Game์ ๋์
ํด ๋ฃจํ ์ ์ด์ ์ํ ๋ณ๊ฒฝ์ ๋ฉ์์ง๋ก ์ฎ๊ฒผ์ง๋ง, ์ ํ ๊ฐ๋ฅํ ๊ธฐ๋ฌผ/๊ฒฝ๋ก ์กฐํ์ ๊ฒ์ฆ์ ์ฌ์ ํ GameRunner๊ฐ ์ง์ ์กฐํฉํ๊ณ ์์ต๋๋ค.
๋ฌผ๋ก ๋๋ฉ์ธ ๊ท์น์ ์์ ๋ชจ๋ฅด๋ ์ํ๋ก ์๊ฒฉํ ๊ณ์ธต๊ฐ ํ๋ฆ๋ง ์กฐ์จํ๋ '์ปจํธ๋กค๋ฌ'์๋ ๋ฌ๋ฆฌ GameRunner๋ ๋๋ฉ์ธ ๊ท์น์ ๋ํ ์ฑ
์์ ๊ฐ์ง๋ฉด์ ํ๋ฆ ์ฒ๋ฆฌ๋ฅผ ๋๋ ์ญํ ๋ก์ ์ค๊ณํ์์ผ๋, ํ์ฌ์ ๋ก์ง์ ๋ฌ๋๊ฐ ์ถฉ๋ถํ ์์๋ ๋๋ ๋งํผ ์๊ณ ์๋ ๊ฒ์ด ๋ง๋์ง ๊ถ๊ธํฉ๋๋ค.
There was a problem hiding this comment.
์ ํ ๊ฐ๋ฅํ ๊ธฐ๋ฌผ/๊ฒฝ๋ก ์กฐํ๋ "์ฌ์ฉ์์๊ฒ ๋ญ ๋ณด์ฌ์ฃผ๊ณ ๋ญ ์ ๋ ฅ๋ฐ์์ง"์ ๋ํ ํ๋จ์ด๋ผ Runner๊ฐ ์์๋ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์ง๋ง ํ์ฌ playTurn() ์์๋,
- ์์ด ์กํ๋ฉด ๊ฒ์์ด ๋๋๋ค
- ์์ด ์ ์กํ์ผ๋ฉด ํด์ ๋๊ธด๋ค
"๊ฒ์์ด ์ด๋ค ์กฐ๊ฑด์์ ์ด๋ค ์ํ๋ก ์ ์ดํ๋๊ฐ" ๋ผ๋ ํต์ฌ ๋๋ฉ์ธ ๊ท์น์ ์๊ณ ์์ต๋๋ค.
๋ค๋ฅธ ์๊ตฌ์ฌํญ์ด ์ถ๊ฐ๋๋ค๋ฉด ๊ฒ์ ๋ฌ๋๋ฅผ ์์ ํด์ผ ํ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
"์ฅ๊ธฐ์ ๊ท์น"์ Game ์ด ์๊ฒ ํ๋๋ก ๊ฐ์ ํด๋ด ์๋ค.
| @@ -0,0 +1,36 @@ | |||
| package domain.game; | |||
|
|
|||
| import strategy.formation.InitialFormationStrategy; | |||
There was a problem hiding this comment.
FormationType์ด ๋๋ฉ์ธ ํจํค์ง์ ์์ง๋ง ์ ๋ต ํจํค์ง์ ์์กดํ๊ณ ์์ต๋๋ค.
๋๋ฉ์ธ โ ์ ๋ต ๋ฐฉํฅ์ ์์กด์ด ๋ฐ์ํฉ๋๋ค. ๋ณดํต ์ ๋ต์ด ๋๋ฉ์ธ์ ์์กดํ๋ ๊ฒ์ด ์์ฐ์ค๋ฌ์ด ๋ฐฉํฅ์ ๋๋ค.
|
|
||
| final MoveResult moveResult = MoveResult.from(destinationPiece); | ||
| pieces.remove(currentPosition); | ||
| pieces.put(destination, piece); |
There was a problem hiding this comment.
Board.move์์ ์กํ ๊ธฐ๋ฌผ์ Map์์ ์ ๊ฑฐํ์ง ์๊ณ ์์ต๋๋ค.
pieces.put(destination, piece)๊ฐ ๊ธฐ์กด ๊ฐ์ ๋ฎ์ด์ฐ๋ฏ๋ก ๊ฒฐ๊ณผ์ ์ผ๋ก ์กํ ๊ธฐ๋ฌผ์ ์ ๊ฑฐ๋ฉ๋๋ค. ๋์์ ๋ง์ง๋ง, ์กํ ๊ธฐ๋ฌผ์ ์ ๊ฑฐ๊ฐ put์ ๋ถ์ํจ๊ณผ๋ก ์๋ฌต์ ์ผ๋ก ์ผ์ด๋๋ค๋ ์ ์ด ๊ฐ๋
์ฑ์ ๋จ์ด๋จ๋ฆด ์ ์์ต๋๋ค.
| return id; | ||
| } | ||
|
|
||
| public void assignId(Long id) { |
There was a problem hiding this comment.
Repository์์ save ํ ID๋ฅผ ์ฃผ์ ํ๋ ํจํด์ธ๋ฐ, Game์ด ์์ ์ ์๋ณ์๊ฐ ๋์ค์ ๋ฐ๋ ์ ์๋ ๊ฐ๋ณ ์ํ๊ฐ ๋ฉ๋๋ค. save ์ ์ Game ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ๋ฐฉ์์ด ๋ ์์ ํฉ๋๋ค
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
์๋ ํ์ธ์ ์ ๋, ์ด๋ฒ์๋ ๋น๊ต์ ๋ฆ์ ์๊ฐ์ ์์ฒญ์ ์ฌ๋ฆฌ๊ฒ ๋ ์ง๊ฐ์ ๋ฃจ๋์ ๋๋ค ๐ฅฒ
์ด๋ฒ PR์์๋ ๊ถ์ฑ ํน์ ๊ท์น, ์ ์ ๊ณ์ฐ, ๊ฒ์ ์นํจํ์ (์์ด ์กํ๋์ง)์ ์งํ ๋์ค ์ข ๋ฃ ์ ๊ฒ์ ์ฌ๊ฐ(DB ํ์ฉ) ๊ธฐ๋ฅ ๋ฑ์ ๊ตฌํํ์ต๋๋ค.
๊ตฌํ์ ์ ์ ํ๊ฒ ํ๋์ง,DB ๋์ , ์ค๊ณ, ์ฌ์ฉ ๋ฐฉ์ ๋ฑ์ด ์ ์ ํ๋์ง๋ ์ค์ํ์ง๋ง, ์๋ ์ค๊ณ ํ๋จ์ ๋ํด์ ํนํ ํผ๋๋ฐฑ ๋ฐ๊ณ ์ถ์ต๋๋ค.
1. Tell, Donโt Ask ์ ์ฉ ์์ค์ด ์ ์ ํ์ง
์ด๋ฒ ์ฅ๊ธฐ ๋ฏธ์ ๋์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น ์ค์์๋ ๊ฐ์ฅ ์์ํ๋ฉด์ ์ ์ฉํ๊ณ ์ ํ๋ ๋ถ๋ถ์ด ์ด TDA๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฌ์ดํด1~2 ๋ด๋ด ์ด๋ฅผ ์ต๋ํ ๋ฐ์ํด๋ณด๊ณ ์ ํ์๋๋ฐ ๊ทธ ๊ณผ์ ์์ ์ด '๋ฌป์ง ๋ง๊ณ ์ง์ ์ํจ๋ค'๋ ํญ์ ์ ๋ต์ด ๋ ์ ์๋ ๋ฐฉ์์ ์๋์ ๋๋ผ๊ฒ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ค ์ํฉ์์ ์ด๋๊น์ง TDA๋ฅผ ์์ํ๊ณ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋๊ฐ์ ๋ํ ์์ ๋ง์ ๊ธฐ์ค์ ์ธ์์ผ ํ ๊ฒ ๊ฐ์๋ฐ, ์์ง์ ๊ฒฝํ์ด ๋ถ์กฑํด์ ํท๊ฐ๋ฆฌ๋ ์ํฉ์ ์์ฃผ ์ฒํ๊ฒ ๋๋ ๊ฒ ๊ฐ์์. ์ ๋๋ ์ด ๊ท์น์ ์ ์ฉํ๋ ์ํฉ์ ์ด๋ค ๊ธฐ์ค์ ๊ฐ์ง๊ณ ๊ณ์ ์ง ๊ถ๊ธํฉ๋๋ค .
ํ์ฌ ์ ์ ์ฝ๋์๋ TDA๋ฅผ ์๋ํ ๋ถ๋ถ๊ณผ, ์ ํ์ ์ผ๋ก ๋ค๋ฅธ ์ฐ์ ์์(์ถ์ํ, ํด๋น ๊ฐ์ฒด์ ์ฑ ์์ด ์ ์ ํ๋ค๋ ํ๋จ ๋ฑ)๋ฅผ ๊ณ ๋ คํ์ฌ TDA ๋์ ์ง์ ๊ฐ์ ๊บผ๋ด ์กฐ๋ฆฝํ๊ธฐ๋ ํ๋ ์ํฉ์ด ์์ฌ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ๋ถ๋ถ์ ๋ํด์ ํ๋จ์ด ์ ์ ํ์์ง ๊ถ๊ธํฉ๋๋ค. (์ด ๋ถ๋ถ์ด ์ด๋ค ์ฝ๋์ธ์ง๋ ํด๋น ์ฝ๋์ ์ฝ๋ฉํธ๋ก ๋จ๊ฒจ๋๊ฒ ์ต๋๋ค.)
2. ๊ฐ์ฒด ์์ ์ฑ ์ ๋ถ๋ฆฌ๊ฐ ๊ณผํ์ง
์ด๋ฒ PR๊ณผ ์ด์ ์ฌ์ดํด๊น์ง ํฌํจํด Game, GameStatus, FormationType, GameRepository, H2GameRepository, Palace, PalaceRouteGenerator, ์ ์ ์ ์ฑ ๊ฐ์ฒด ๋ฑ ์๋ฏธ๋ฅผ ๋ถ๋ฆฌํ ๊ฐ์ฒด๋ค์ด ๊ณ์ ๋์ด๋ฌ์ต๋๋ค.
์์ ์ ์ญํ ์๋ง ์ง์คํ ์ ์๋ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฑ ์์ด ์์ธ๋ค๊ณ ๋๊ปด์ง๋ ๋ถ๋ถ์ด ์๊ฑฐ๋, ๋จ์ ๊ฐ ๊ฐ์ฒด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ๋จ์๊ฐ ์๋ค๊ณ ํ๋จ ๋๋ฉด ์ต๋ํ ๋ฌถ์ด์ ํํํ๊ณ ์ ํ๋๋ฐ ์์ฑ ์์ ์์ ๋์๋ณด๋ ๋๋ฌด ๋ง์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ธ ๊ฒ์ ์๋๊ฐ ์๋ฌธ์ด ๋ค์์ต๋๋ค.
๊ฐ ๊ถ๊ธํฉ๋๋ค.
3. ์์ง๋์ ๊ฒฐํฉ๋ ๊ด์ ์์ ํ์ฌ ๊ตฌ์กฐ๊ฐ ๊ด์ฐฎ์์ง
๊ตฌํ ๊ณผ์ ์์๋ ์ฐ์ ๊ธฐ๋ฅ์ ์์ฑํ๋ ๋ฐ ์ง์คํ๊ณ , ๊ทธ ๋ค์ ๋จ๊ณ์์ ๊ตฌ์กฐ๋ฅผ ๋์๋ณด๋ฉฐ ์์ง๋์ ๊ฒฐํฉ๋๋ฅผ ์ ๊ฒํ๊ณ ์์ต๋๋ค. ์ฒ์๋ถํฐ OCP๋ฅผ ์์ํ๊ณ ์ค๊ณํ ๊ฒ์ ์๋์ง๋ง, ์ด๋ฒ ๋ฏธ์ ์์ ์๊ตฌํ๋ ๋ฐฉํฅ ์์ฒด๊ฐ ๊ฒฐ๊ตญ โ๊ธฐ๋ฅ ์ถ๊ฐ๋ ๊ท์น ๋ณ๊ฒฝ ์ ๊ธฐ์กด ์ฝ๋๋ฅผ ํฌ๊ฒ ํ๋ค์ง ์๋ ๊ตฌ์กฐโ๋ฅผ ๊ฐ์กฐํ๋ค๋ ์ ์์ OCP์ ๋ํ ๋ด์ฉ์ ํ์ตํ๊ณ ์๋ค๊ณ ๋๊ผ์ต๋๋ค.
๊ทธ๋์ ํ์ฌ ์ฝ๋๊ฐ ์๋ ๊ด์ ์์ ์ด๋ ์ ๋ ์ ์ ํ์ง ํผ๋๋ฐฑ์ ๋ฐ๊ณ ์ถ์ต๋๋ค.