-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2주차 미션 / 서버 3조 김상균 #33
base: 1week-completed
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 잘 봤습니다!
전반적으로 깔끔하게 코드 잘 작성해주셔서 리뷰하기 편했던 것 같습니다. 이번 미션을 통해 객체 지향에 대한 감을 어느 정도 잘 잡으신 것 같아 다행입니다.
코드 리뷰와 2week-completed 코드 보시면서 본인의 코드와 비교해보는 시간을 가져보시면 좋을 것 같습니다. 수고 많으셨습니다! 3주 차도 파이팅입니다!
@@ -48,4 +50,8 @@ private boolean isLeft() { | |||
private boolean isNone() { | |||
return direction == NONE; | |||
} | |||
|
|||
public int getDirection() { | |||
return this.direction.getValue(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Node 값을 외부로 노출할 필요가 있을까요? 노드 안에서 값을 append 해도 좋을 것 같습니다.
@@ -12,6 +14,10 @@ public Row(GreaterThanOne numberOfPerson) { | |||
} | |||
} | |||
|
|||
public Node[] getNodes() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 로직이 getNodes().length() 이렇게 활용되는데 getNodes를 통해 캡슐화를 깨뜨릴 필요가 있을까요? getNodesLength()를 사용하거나, LadderSize 를 사용하는게 바람직해 보입니다.
|
||
public enum TimeLine { | ||
|
||
BEFORE("Before"), AFTER("After"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
상수를 이넘으로 분리해준 것이 인상 깊네요! 덕분에 LadderRunner와 LaddedrPrinter의 결합도가 느슨해져서 이후 유지보수나 리팩토링에 용의할 것 같습니다!
} | ||
|
||
// 사다리 자동 생성 - 인터페이스를 활용하기 위해 가장 처음 선을 그리고 싶은 위치는 입력 받을 수 있도록 함 | ||
public void drawLine(LadderPosition ladderPosition) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
너무 틀에서 벗어나지 못하는 생각인 것 같습니다. 인터페이스를 활용해서 사다리를 구성하는 방식이 한 가지일까요?
// 사다리를 그릴 수 없다면 다시 반복 | ||
if (!canDrawLineValidation(ladderPosition)) continue; | ||
|
||
rows[ladderPosition.getRow().getValue()].drawLine(ladderPosition.getCol()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
힌트에서 언급했던 조합을 이용하면 이전에 구현해두었던 BasicLadderCreator의 drawline을 재사용 할 수 있을 것 같습니다!
rows[row.getValue()].drawLine(col); | ||
} | ||
// 사다리의 높이(행의 개수), 게임에 참여하는 사람의 수를 설정해주는 메소드 | ||
void setRowsAndPersons(LadderSize ladderSize); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분은 생성자에서 처리해도 되는 로직 아니었을까요? 인터페이스에서 내부 구현의 방법까지 제시해주는 것은 인터페이스의 역할이 아닌 것 같습니다.
import org.junit.jupiter.api.Test; | ||
|
||
public class LadderPrintTest { | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
출력 테스트 맞나요..?
import ladder.constant.TimeLine; | ||
|
||
// 사다리를 출력해주는 클래스 | ||
public class LadderPrinter { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사다리 출력의 책임을 갖는 LadderPrinter 를 도입해, LadderRunner가 사다리 게임 진행의 역할만 맡을 수 있게 되었네요. 좋습니다.
} | ||
|
||
// 몇 개의 사다리를 자동으로 그릴지 결정. 우선 하나의 사다리를 그린 후 시작할 것이므로 계산 결과에서 1을 뺀 값을 반환함 | ||
public int getNumberOfLines() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
랜덤으로 그릴 사다리의 라인 수를 리턴하는 메서드인 것 같은데 이 로직이 LadderSize의 책임일지는 고민해보는게 좋을 것 같습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다~ 🥇 파트장님께서 언급한 것 제외하고 리뷰 남겨봤습니다 ㅎㅎ
LadderGame ladderGame = LadderGameFactory.createBasicLadderGame(); | ||
LadderCreator ladderCreator = ladderGame.getLadderCreator(); | ||
LadderSize ladderSize = LadderSize.from(GreaterThanOne.from(5), GreaterThanOne.from(5)); | ||
ladderCreator.setRowsAndPersons(ladderSize); | ||
ladderGame.getLadderCreator().drawLine(LadderPosition.from(Position.from(0), Position.from(0))); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
음 객체 생성에 필요한 작업이 팩토리 한곳에서만 이루어지도록 수정할 방법을 고민해보면 좋을 것 같아요. 그게 팩토리를 만드는 목적이거든요. 힌트를 드리자면 사디리 크기를 팩토리에게 전달하면 어떨까요?
StringBuilder sb = new StringBuilder(); | ||
|
||
for (int i = 0; i < nodes.length; i++) { | ||
if(i == col.getValue()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
col의 값을 외부로 노출하여 값을 비교하기보단 col 내부에서 값을 비교하도록 하는 게 캡슐화를 지키는 방법이 될 것 같아요!
No description provided.