-
Notifications
You must be signed in to change notification settings - Fork 709
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
3단계 - 사다리(게임 실행) #2034
base: hvoiunq
Are you sure you want to change the base?
3단계 - 사다리(게임 실행) #2034
Changes from all commits
0756ca3
03341d1
8cea432
2936cb6
5dd9c6a
e72e9fb
5ea1b29
a066e94
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
## STEP3 기능 요구사항 | ||
* 사다리 실행 결과를 출력해야 한다. | ||
* 개인별 이름을 입력하면 개인별 결과를 출력하고, "all"을 입력하면 전체 참여자의 실행 결과를 출력한다. | ||
|
||
## 프로그래밍 요구사항 | ||
자바 8의 스트림과 람다를 적용해 프로그래밍한다. | ||
규칙 6: 모든 엔티티를 작게 유지한다. | ||
규칙 7: 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. (= 2개까지만 허용) | ||
|
||
## STEP2 보완사항 | ||
* [X] Ladder 생성, List<Boolean> -> 이전상태와 현재상태를 가지고 있는 객체 | ||
|
||
## Step3 기능분해 | ||
* [X] 실행 결과를 입력할 수 있다. | ||
* [X] 참가자보다 적게 입력하는 경우 Exception 발생 | ||
* [X] 참가자는 현재 위치를 가지고 있는다. | ||
* [X] 참가자가 여러명인 경우 자동으로 현재 위치를 가지고 있는다. | ||
* [X] 참가자가 위치한 라인의 이전상태가 true면 뒤로 이동한다. | ||
* [X] 제일 왼쪽에 위치한 참가자가 한칸 더 왼쪽으로 이동하는 경우 Exception 발생 | ||
* [X] 참가자가 위치한 라인의 현재상태가 true면 앞으로 이동한다. | ||
* [X] 제일 오른쪽에 위치한 참가자가 한칸 더 오른쪽으로 이동하는 경우 Exception 발생 | ||
* [X] 특정 참가자의 이름을 입력하는 경우 현재 위치의 실행결과를 보여준다. | ||
* [X] 전체 결과를 보는 경우 각 참가자의 모든 실행결과를 보여준다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package nextstep.ladder.domain; | ||
|
||
import nextstep.ladder.utils.RandomLineGenerator; | ||
|
||
public class LineState { | ||
private final boolean previous; | ||
private final boolean current; | ||
Comment on lines
+6
to
+7
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 👍 |
||
|
||
|
||
public static LineState previousOf(boolean previous) { | ||
LineGenerator lineGenerator = new RandomLineGenerator(); | ||
return new LineState(previous, !previous && lineGenerator.generateLine()); | ||
} | ||
|
||
public static LineState previousOf(boolean previous, LineGenerator lineGenerator) { | ||
return new LineState(previous, lineGenerator.generateLine()); | ||
} | ||
|
||
public LineState(boolean previous, boolean current) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 생성자는 클래스 메서드 앞에 위치하는 것이 관례임 |
||
checkForConsecutiveTrue(previous, current); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. extract method를 통해 분리한 private 메서드는 가능하면 바로 아래 위치하도록 구현하는 것을 추천 |
||
this.previous = previous; | ||
this.current = current; | ||
} | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. next LineState를 생성하기 위해 다음과 같이 구현하는 것은 어떨까?
|
||
public boolean getPrevious() { | ||
return previous; | ||
} | ||
|
||
public boolean getCurrent() { | ||
return current; | ||
} | ||
|
||
private void checkForConsecutiveTrue(boolean previous, boolean current) { | ||
if (previous && current) { | ||
throw new IllegalArgumentException("사다리 라인은 연속으로 겹칠 수 없습니다."); | ||
} | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "LineState{" + | ||
"previous=" + previous + | ||
", current=" + current + | ||
'}'; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package nextstep.ladder.domain; | ||
|
||
import java.util.Arrays; | ||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
|
||
public class ResultInfo { | ||
|
||
private final List<String> results; | ||
|
||
public ResultInfo(String result, int participantCount) { | ||
this(checkResultSize(Arrays.stream(result.split(",")).collect(Collectors.toList()), participantCount)); | ||
|
||
} | ||
|
||
private static List<String> checkResultSize(List<String> result, int participantCount) { | ||
checkResultAndParticipantCount(result, participantCount); | ||
return result; | ||
} | ||
|
||
public ResultInfo(List<String> results) { | ||
this.results = results; | ||
} | ||
|
||
private static void checkResultAndParticipantCount(List<String> result, int participantCount) { | ||
if (result.size() != participantCount) { | ||
throw new IllegalArgumentException("결과 갯수와 참가자 수와 다릅니다."); | ||
} | ||
} | ||
|
||
public List<String> getResults() { | ||
return results; | ||
} | ||
|
||
public String getResult(int position) { | ||
return results.get(position); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package nextstep.ladder.exception; | ||
|
||
public class CanNotMoveException extends RuntimeException{ | ||
public CanNotMoveException(String message) { | ||
super(message); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package nextstep.ladder.exception; | ||
|
||
public class NotFoundException extends RuntimeException{ | ||
public NotFoundException(String message) { | ||
super(message); | ||
} | ||
} |
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.
가능하면 구현체보다 인터페이스 사용할 것을 추천
인터페이스로 구현하는 것이 왜 좋은지 고민해 보면 좋겠다.