Skip to content
Open
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
7d27a33
fix: 향상된 문법으로 equals 수정
junseoplee Jul 19, 2024
d6ca9b5
docs: 기능 요구 사항 업데이트
junseoplee Jul 20, 2024
5e9f872
feat: 승리한 팀을 찾고 출력하는 기능 구현
junseoplee Jul 20, 2024
fba2d73
feat: King 이 잡혔을 때 승리 팀과 점수를 출력하는 기능 구현
junseoplee Jul 22, 2024
90f634b
fix: Pawn 피스가 적이 없을 경우에도 대각선으로 움직일 수 있던 오류 수정
junseoplee Jul 22, 2024
89edcb7
docs: 기능 요구 사항 정리
junseoplee Jul 22, 2024
0218cec
refactor: 프로젝트 구조 수정
junseoplee Jul 23, 2024
c786f3d
feat: 게임별로 구분할 수 있는 ChessGame 클래스 구현, 저장할 수 있도록 상태를 나타내는 State 열거형 구현
junseoplee Jul 23, 2024
5fd16d9
feat: DB 연결에 필요한 설정 추가
junseoplee Jul 23, 2024
54b66b5
feat: DB 연결을 위한 ChessGameDao 기능 추가
junseoplee Jul 23, 2024
9f7f78c
feat: DB 연결을 위한 PieceDao 기능 추가
junseoplee Jul 23, 2024
037471d
feat: DB 연결을 위한 PieceDao 기능 추가
junseoplee Jul 23, 2024
61d451a
fix: DB 연결을 위한 설정 수정
junseoplee Jul 25, 2024
3f07391
refactor: Board 반환을 위한 리팩토링
junseoplee Jul 25, 2024
a4d293e
refactor: 진행 상태를 보다 명확하게 알 수 있도록 변경
junseoplee Jul 25, 2024
e20a260
feat: DB 연결 기능과 컨트롤러 조립
junseoplee Jul 25, 2024
80b7e47
docs: 기능 요구 사항 및 에러메세지 업데이트
junseoplee Jul 25, 2024
a3ac67f
fix: 기존 게임이 정상적으로 불러와지지 않던 오류 수정
junseoplee Jul 25, 2024
ddfb961
refactor: 명령어를 다루는 책임을 컨트롤러에서 분리
junseoplee Jul 29, 2024
7c6c78e
feat: UnsupportedOperationException 으로 사용되지 않는 메서드 관리
junseoplee Jul 29, 2024
0ad0e65
test: 폰의 공격 움직임을 검증하는 테스트 추가
junseoplee Jul 29, 2024
3ce712d
fix: 변수 이름을 명확하게 수정
junseoplee Jul 29, 2024
d5483e4
fix: 상태를 더 명확하게 나타낼 수 있는 이름으로 수정
junseoplee Jul 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions src/main/java/chess/controller/ChessController.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ public void runChess() {
String commandInput = inputView.receiveCommand();
receivedCommand = commandFactory.createCommand(commandInput);
if (receivedCommand.validateStatusCommandType()) {
calculateAndPrintCurrentTurnScore();
continue;
receivedCommand.execute(this);
continue; // 명령이 status 일 경우 턴을 바꾸지 않음
}
receivedCommand.execute(this);
currentTurn = currentTurn.changeTurn();
Expand All @@ -77,9 +77,7 @@ public void endGame() {

public void movePiece(Position source, Position target) {
Piece capturedPiece = board.move(source, target, currentTurn);
if (capturedPiece != null && capturedPiece.pieceType() == PieceInfo.KING) {
endGame();
}
checkAndHandleKingCapture(capturedPiece, currentTurn);
outputView.printBoard(board.getMap());
}

Expand All @@ -103,4 +101,13 @@ public void printScoreAndWinningColor() {
outputView.printDraw();
}
}

private void checkAndHandleKingCapture(Piece capturedPiece, Color currentTurn) {
if (capturedPiece != null && capturedPiece.pieceType() == PieceInfo.KING) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이번 단계를 하면서 느꼈겠지만, null 값을 해당 칸에 피스가 없음 처럼 비즈니스 로직을 나타내는 의미로 사용하면 여러 문제가 발생합니다.
ex. 의도한 null 인지 의도하지 않은 null 인지 확인 불가, null 검사를 빼먹을 경우 어디서 에러가 발생하는지 찾기 힘듦...

이런 문제를 해결하기 위해서 여러 방법을 사용해볼 수 있는데, 대표적으로 null object pattern 이 있습니다.

한 번 공부해보시고, 저 패턴 외에 추가적으로 어떤 방법이 있을지, 또 이런 방법들은 어떤 장단점이 있을지 공부해보셔도 좋겠네요

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

null 객체 패턴이라니 재밌는(?) 내용이네요 힘내서 공부해보겠습니다

endGame();
double currentTurnScore = ScoreCalculator.calculate(board.getMap(), currentTurn);
outputView.printCurrentScore(currentTurn, currentTurnScore);
outputView.printWinningColor(currentTurn);
}
}
}