[๐ ์ฌ์ดํด2 - ๋ฏธ์ (๊ธฐ๋ฌผ ํ์ฅ + DB ์ ์ฉ)] ์ด์ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#350
[๐ ์ฌ์ดํด2 - ๋ฏธ์
(๊ธฐ๋ฌผ ํ์ฅ + DB ์ ์ฉ)] ์ด์ ๋ฏธ์
์ ์ถํฉ๋๋ค.#350sihyung92 merged 27 commits intowoowacourse:eian1106from
Conversation
์ธ์คํด์ค ๋ณ์ ๋ฏธ์ฌ์ฉ์ผ๋ก ๋ณ๊ฒฝ
sihyung92
left a comment
There was a problem hiding this comment.
์๋ ํ์ธ์ ์ด์, ๋ฆฌ๋ทฐ์ด ์จ์ง์ ๋๋ค.
JDBC๊ฐ ์ฒ์์ด์๋ผ๋ฉด ์๋ก์ด ๊ฐ๋ ์ด ๋ฌผ๋ฐ๋ฏ์ด ๋ค์ด์ค์คํ ๋ฐ, ํ์ตํด๋ณด๊ณ ์ ์ฉํด๋ณด์๊ณ ์ถ์ผ์ ๊ฒ ์๊ธฐ์ จ๋ค๋ฉด ๋ฐ์ํด์ฃผ์ ์
Palace์ Position
์ง๊ธ์ ์ด๋์ ์๋ ํฐ ์ฐจ์ด๋ ์๋ค๊ณ ์๊ฐํด์. board / piece / position 3๊ฐ์ ํจํค์ง๊ฐ ์๋ก๋ฅผ ์๊ณ ์๋ ์ํ์ฌ์์. ์ผ๋จ ํํ๋๋ก ํด๋ณด์์ฃ ^.^
๋ ์งํํ์๊ณ ์์ฒญ์ฃผ์ ์. ํ์ดํ ์ ๋๋ค~
| return Camp.CHO; | ||
| } | ||
|
|
||
| return Camp.NONE; |
There was a problem hiding this comment.
์ด๊ฑฐํ(enum)์์ ๊ฐ๊ธ์ ์ด๋ฉด "NONE" ๊ฐ์, ์กด์ฌํ์ง ์๋ ์ผ์ด์ค์ ๋ํด ์ ์ํ์ง ์๋๊ฒ ๋ง์ต๋๋ค.
(ํ์ ์์ API ๋ฒ์ ๋ ์ด์ ๋ฑ์ผ๋ก API ํ๋ผ๋ฏธํฐ์์ enum์์ ์ ์ํ์ง ์์ ๋ช ์นญ์ด ๋์ด์์ ๋ 500์ด ๋ฐ์ํ๋ ๊ฑธ ๋ง๊ธฐ ์ํด UNKNOWN ๊ฐ์ ๊ฑธ ์ ์ธํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด ํ๋ฐ์.)
๋งค๋ฒ Camp์ ๋ํ ๋ก์ง์ด ํ์ํ ๋ ๋ง๋ค NONE์ ๋ํ ๋ถ๊ธฐ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผํฉ๋๋ค.
์ค์ ์ค๋ฆฝ ์ง์์ด ์กด์ฌํ์ง ์๋๋ฐ "์ค๋ฆฝ"์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์๊ตฌ๋ฐ์ ๊ฐ๋ฐ์๋ ๋๊ฐํ๊ธฐ๋ ํ ํ
๊ณ ์. (๋ชจ๋ NONE ์ผ์ด์ค๋ฅผ ํ์ด๋ด์ผํจ)
Optional๋ฅผ ๋ฆฌํดํ์ ์ผ๋ก ํด๋ณด์๋ฉด ์ด๋จ๊น์?
src/main/java/domain/PieceType.java
Outdated
| ELEPHANT(3), | ||
| SOLDIER(2), | ||
| CHARIOT(13), | ||
| NONE(0); |
There was a problem hiding this comment.
์ด๊ฑฐ ์ง์ ์ Camp.NONE์ ๋ํ ๋ฆฌ๋ทฐ๋ฅผ ํ ํ ๋น์ทํ ๋ฆฌ๋ทฐ๋ฅผ ์ํด ๋ณด๋ค๋ณด๋, ์์ ์ฐ์ด์ง ์๋ ์ฝ๋๋ค์. ์ ๊ฑฐํด์ฃผ์ ์.
| private Camp turnCamp(Camp camp) { | ||
| if (camp.equals(Camp.CHO)) { | ||
| return Camp.HAN; | ||
| } | ||
| return Camp.CHO; | ||
| } |
There was a problem hiding this comment.
cho ๋ค์์ han, han ๋ค์์ cho ๋ผ๋ ์ ํ ๊ท์น์ ๋๋ฉ์ธ ๊ท์น์ด๋ผ๊ณ ์๊ฐ๋๋ค์. Camp ๋ฉ์๋๋ก ์ฎ๊ฒจ์ฃผ์๋ ๊ฑด ์ด๋จ๊น์
|
|
||
| import java.util.List; | ||
|
|
||
| public class SingleStepPiece extends Piece { |
There was a problem hiding this comment.
Horse, Elephant๋ ๊ฑฐ์ ๊ฐ์ ๋ก์ง์ ๊ณต์ ํ๋๋ฐ์.
๊ฑด๋ ๋ธ ์ ์๋ ๊ธฐ๋ฌผ๋ค์ ๊ณตํต ๋ถ๋ชจ๋ฅผ ์ ์ํด์ฃผ์ด๋ ์ข๊ฒ ์ด์.
SingleStepPiece ๊ฐ์ฒด๋ ๊ทธ๋ ๊ณ , Horse/Elephant์ ๊ณตํต ๋ถ๋ชจ๋ ๊ทธ๋ ๊ณ ๋ฐ๋ก ์์ฑํ ์๋ ์๋๋ก abstract class๋ก ์ ์ํ๋ ๊ฒ ์ข๊ฒ ์ต๋๋ค.
java 17๋ถํฐ๋ sealed class ๋ก ์ ์ธํ๋ ๋ฐฉ๋ฒ๋ ์์ผ๋, ํ์ ์ฝ๋์์ java 17 ์ดํ ๋ฒ์ ์ธ ๊ฒฝ์ฐ๋ ์์ด ํ๋ฐํ ์ฐ์ด๋ ๋ฌธ๋ฒ์ ์๋๋๋ค.
There was a problem hiding this comment.
Horse/Elephant ์ ๊ณตํต๋ถ๋ชจ์ธ MultiStepPiece๋ฅผ ๋ง๋ค์ด ๊ณตํต ๋ก์ง์ ๊ฐ์ ํ์์ต๋๋ค!
๊ฑด๋ ๋ธ ์ ์๋ ๊ธฐ๋ฌผ๋ค์ ๊ณตํต ๋ถ๋ชจ
๊ฑด๋ ๋ธ ์ ์๋ ๊ธฐ๋ฌผ๋ค ์ด๋ผ๋ ๊ฒ์ Cannon์ด ๊ฑด๋ ๋ธ ์ ์๋ ๊ธฐ๋ฌผ๋ค. ์ฆ Cannon์ ์ ์ธํ ๋ชจ๋ ๊ฒ ์ธ๊ฐ์?
Cannon์ ์ ์ธํ ๊ธฐ๋ฌผ๋ค์ ๋ค๋ฅธ ๋ง์ ๊ฑด๋ ๋ธ ์ ์๊ธฐ์, ๋ง์ํด์ฃผ์ '๊ฑด๋ ๋ธ ์ ์๋ ๊ธฐ๋ฌผ'์ด๋ผ๋ ํํ์ด ์ด๋ ๊ฒฝ๋ก ์ค๊ฐ์ ์ฅ์ ๋ฌผ์ด ์๋์ง ๊ฒ์ฌํด์ผ ํ๋ ๋ง(Horse)์ ์(Elephant)์ ์ง์นญํ์ ๊ฒ์ผ๋ก ์ดํดํ์ฌ ๋ฐ์ํด ๋ณด์์ต๋๋ค!
Chariot๋ ๊ฑด๋ ๋ ์๊ฐ ์์ผ๋ฉฐ
Chariot๊ณผ Cannon๋ ๊ณตํต๋๋ ๋ถ๋ถ(linear)
์ด ๋ง์ง๋ง ์ฌ์ดํด2์ ์๊ฐ๊ด๊ณ์ ๋ฐฉํ ์ค ๊ฐ์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค ๐ญ
| } | ||
| } | ||
|
|
||
| //๊ถ์ฑ ๋ก์ง |
There was a problem hiding this comment.
์๋ ์ฝ๋์ ๋ด์ฉ๊ณผ ๋์ผํ ์ค๋ช ์ด๋ ์ ๊ฑฐํด์ฃผ์ ์
| Position current = from; | ||
| boolean PassGeneralPosition = false; | ||
| while (current.canMove(direction)) { | ||
| current = current.move(direction); | ||
| if(Palace.isGeneralPosition(current)) { | ||
| PassGeneralPosition = true; | ||
| } | ||
| if (current.equals(to) && PassGeneralPosition) { | ||
| return true; | ||
| } | ||
|
|
||
| if (boardReader.isExist(current)) { | ||
| break; | ||
| } | ||
| } |
There was a problem hiding this comment.
from์ ๊ถ์ฑ์ ์ค์ฌ, ์ฆ (4,8) ๋ฑ์ธ ๊ฒฝ์ฐ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค.
(4,8) -> (5,9) ์๋๋ฆฌ์ค๋ฅผ ๊ฒํ ํด๋ณด์ธ์.
์ด๋ ๊ฒ ๋ฒ๊ทธ๋ก ์ ๋ณด๋ ๊ฒฝ์ฐ๋ ํ ์คํธ๋ฅผ ํตํด ๋ฐฉ์ดํด๋๋ ์ต๊ด์ ๋ค์ด๋๊ฒ ์ข์ต๋๋ค. (์ ๊ธฐ์กด์ ํ ์คํธ๋ก ํด๋น ๋ฒ๊ทธ๋ฅผ ์ก์ ์ ์์๋๊ฐ๋ฅผ ๊ณ ๋ฏผํด๋ณด๋ ์ต๊ด)
| BoardReader boardReader, | ||
| Direction direction) { | ||
| Position current = from; | ||
| boolean PassGeneralPosition = false; |
There was a problem hiding this comment.
๋ณ์๋ช ์ด PascalCase๋ก ์ ์ธ๋์ด ์๋ค์
There was a problem hiding this comment.
๊ทธ๋ฆฌ๊ณ ์ด๊ฑธ ๋ค์ฏ๋ฒ์งธ ์ธ์๋ก ๋ฐ์์ฃผ๋ฉด, ๋์ผํ ๋ก์ง์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ์ฃ .
private boolean canReachTarget(..., Direction direction) {
return slideToTarget(from, to, boardReader, direction, true);
}
private boolean canReachTargetViaGeneral(..., Direction direction) {
return slideToTarget(from, to, boardReader, direction, Palace.isGeneralPosition(from));
}
private boolean slideToTarget(Position from, Position to,
BoardReader boardReader, Direction direction,
boolean reachable) {
Position current = from;
while (current.canMove(direction)) {
current = current.move(direction);
if (Palace.isGeneralPosition(current)) {
reachable = true;
}
...There was a problem hiding this comment.
์ธ์๊ฐ ๋ง์ด์ง๋ ๊ฒ์ ๊ฒฝ๊ณ๋ฅผ ํด์ผํ ๊น์?
์ค๋ฌด์์๋ ์ธ์๋ฅผ ์ด๋์ ๋๊น์ง ์ฌ์ฉํด๋ ๋๋์ง ๊ถ๊ธํฉ๋๋ค!
| @@ -1,13 +1,15 @@ | |||
| package domain; | |||
There was a problem hiding this comment.
domain root์ ๋จ๊ฒจ์ง class ๋ค์ด ๋ง์๋ฐ์.
๊ธฐ์กด ํจํค์ง์ ํฌํจ์ํค๊ฑฐ๋, ์๋ก์ด ํจํค์ง๋ฅผ ๋ง๋ค ์ ์์๊น์?
domain root๊ฐ '์ง ๋ชป ์ฐพ์ ๋ฏธ์ ๋ชจ์์ง' ์ด ๋์ด๊ฐ๊ณ ์๋ค์.
src/main/java/JanggiController.java
Outdated
|
|
||
| private final InputView inputView; | ||
| private final OutputView outputView; | ||
| private final JanggiRepository janggiRepository; |
There was a problem hiding this comment.
MVC๋ Model(๋ฐ์ดํฐ ๊ณ์ธต)๊ณผ View์ ๊ต์งํฉ ์ญํ ์ ํ์ฃ .
๊ทธ๋ฌ๋ domain๊น์ง ๋์ถ๋์ด์๋ ์ํฉ์์ DB ์ง์ ์ ๊ทผ์ controller์ ์ฝ๋๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค์ด์.
service ๊ณ์ธต๊ณผ ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค์ด "key๋ฅผ ๋ฐ์ DB์ ์ ๊ทผํด Board๋ฅผ ๋ง๋ค์ด์ ์๋ตํ๋ ์ ์ฐจ ๋ฉ์๋", "Board ๊ฐ์ฒด๋ฅผ DB์ ์ ์ฅํ๋ ์ ์ฐจ ๋ฉ์๋"๋ฅผ ๋ง๋ค๊ณ controller์์ ์ข๋ ๊ฐ๋ณ๊ฒ ์ง์ํ๋ ํจํด์ ๊ตฌํํด๋ณด๋ฉด ์ด๋จ๊น์?
| private static final String PASSWORD = ""; | ||
|
|
||
| public void saveGame(Map<Position, Piece> boardStatus, Camp camp) { | ||
| initTable(); |
There was a problem hiding this comment.
ํ ์ด๋ธ ์ด๊ธฐํ๋ ๋งค๋ฒ ํ๋ ์์ ์ด ์๋๊ธฐ ๋๋ฌธ์ Repository ์์ ๊ตฌํํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์. ๋์ ๋ฐ๋ผ ๋งค์ฐ ์ํํ ์ฝ๋๊ฐ ๋ ์ ์์ด์์.
๊ฐ๋ฐ ํ๊ฒฝ์ด๋ ํ ์คํธ ํ๊ฒฝ์์๋ง ๋ณ๋๋ก ํด๋น ์ฝ๋๊ฐ ์คํ๋๋๋ก ๊ตฌํํ๋ ํธ์ ๋๋ค. ์ด๋ฅผ ์ํด ์ฌ๋ฌ ํ๋ ์์ํฌ์์ ๋ฐฉ๋ฒ๋ก ์ด ์ง์๋๊ณ ์๋๋ฐ, ์ฐ์ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์ํ ๋ ํ๋ฒ ์๋ํ๋๋ก ์ฝ๋๋ฅผ ๋ง๋ค์ด๋ณด์ธ์. (๊ทธ๋ผ ๋์ค์ java ํ๊ฒฝ๋ณ์ ๋ฑ์ ์ ๊ณต๋ฐ์ ์คํํ ์ง๋ง์ง ๋ถ๊ธฐํ๋ ์ฝ๋๋ก ๋ฐ์ ์ํฌ ์ ์๊ฒ ์ฃ ?)
sihyung92
left a comment
There was a problem hiding this comment.
์๋
ํ์ธ์ ์ด์, ๋ฆฌ๋ทฐ์ด ์จ์ง์
๋๋ค.
DM์์ ๋ง์๋๋ฆฐ ๋๋ก ์ฐ์ ๋จธ์ง ํ ์ต์ข
๋ฆฌ๋ทฐ๋ฅผ ๋๋ฆด๊ฒ์.
์ด๋ ค์ด ์ฅ๊ธฐ ๋ฏธ์
์ํํ์๋๋ผ ์๊ณ ๋ง์ผ์
จ์ด์. ์์ผ๋ก์ ๋ ๋ฒจ๋ค๋ ํ์ดํ
์
๋๋ค
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
Palace์ Position
Palace๋ ์์น์ Position๊ณผ ๊ด๋ จ๋์ด ๊ถ์ฑ์ ์์น์ธ์ง, ๊ถ์ฑ ์ ์ค์(์ ์์น)์ธ์ง ํ์ธํด์ฃผ๋ ํด๋์ค ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ํด๋น ๋ฉ์๋๋ค์ Position์ ์์นํด๋ ๋์ง์๋? ๋ผ๋ ์๊ฐ์ ํ์ต๋๋ค.
Position์์ ํด๋น ๋ฉ์๋๋ค์ ์ ๊ณตํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ Palace์ ๋ด์ฉ์ Position์ ์์นํ๋ค๋ฉด, Position์ด ํ๋ ์ฑ ์์ด ๋๋ฌด ๋ง์์ง๊ธฐ์ ์คํ๋ ค ๋ถ๋ฆฌํ๋ ๊ฒ ๊ถ์ฑ ์์ญ์ ๋ํ ๊ด๋ฆฌ๊ฐ ์ฝ๋ค๋ ์๊ฒฌ๋ ์์์ต๋๋ค.
๋ฐ๋ผ์ ์จ์ง์ ์๊ฒฌ์ด ๊ถ๊ธํฉ๋๋ค!
DB
JDBC๋ฅผ ์ฒ์ ์ฌ์ฉํ๋ค๋ณด๋, ๊ธฐ์ด์ ์ธ CRUD๋ง ํ์ตํด๋ณด๊ณ , ๋ฐ๋ผํด๋ณด์๋๋ฐ์
๋ค์ ๋จ๊ณ๋ก ๋์๊ฐ ๋ฐฉํฅ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
์จ์ง์ ๋ฆฌ๋ทฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๋์
์ ๋ํด์ ํ์ตํ๊ณ ์๊ฒ ์ต๋๋ค!
๊ฐ์ฌํฉ๋๋ค ๐โโ๏ธ