-
Notifications
You must be signed in to change notification settings - Fork 1.2k
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
Step3 자동차경주 #5516
base: kimsangha617
Are you sure you want to change the base?
Step3 자동차경주 #5516
Conversation
This reverts commit 725b9ce.
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.
안녕하세요 상하님 😃
너무 고민하시기 보다 더 이상 해결이 어렵다 싶을 때 지금처럼 리뷰 요청 주시면 됩니다.
어려워 하시는 부분에 대한 힌트를 좀 남겼는데요 그래도 어려우시다면 DM 주세요
혹시 1차 라이브 강의를 안 보셨다면 꼭 보셨으면 좋겠습니다
코멘트 확인해 주시고 다시 리뷰 요청 부탁드려요
public void move() { | ||
System.out.print("-"); | ||
} |
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.
자동차는 움직일 수 있어야 하지만 특정 조건인 경우에만 움직일 수 있는데요
canMove를 누가 호출해 주지 않으면 조건에 부합하는지 알 수 있는 방법이 없습니다
자동차 객체가 스스로의 움직임을 제어할 수 있도록 move 메서드 내부에서 canMove 메서드를 호출하면 어떨까요?
외부에서는 move 메서드만 호출하게 하고 움직일지 말지는 자동차가 직접 결정하는거죠
public void move() { | ||
System.out.print("-"); | ||
} |
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.
자동차가 움직일 경우 바로 출력을 해버리면 현재 몇 칸을 전진했는지 알 수 있는 방법이 없는데요
move 메서드 내부에서 System.out.println으로 출력하기 보다 위치 값을 증가 시키면 어떨까요?
Car 내부에 private int position;
변수가 있다면 자동차가 전진한 위치값을 가질 수 있겠네요
추가로 테스트까지 할 수 있을 것 같습니다. 지금 테스트 코드가 하나도 없으니 move 메서드에 대한 테스트를 작성해 보시면 좋을 것 같아요
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.
위치값을 증가시키고 몇 칸을 전진 했는지 알려면 스레드를 돌려야 할까요 ?
for문을 돌려 "-" 을 찍어주는 형태로 구현해봤는데요...
그리고 move 메소드를 테스트 할 때 canMove() 를 호출해야 하는데 canMove()는 Random 값이 4이상이었을 때만 테스트가 가능해보이는데.. 일정한 값이 나오는 테스트를 구현할 수 있을까요 ?
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.
미션의 핵심을 잘 짚어주셨습니다 👍
위치값을 증가시키고 몇 칸을 전진 했는지 알려면 스레드를 돌려야 할까요 ?
for문을 돌려 "-" 을 찍어주는 형태로 구현해봤는데요...
과정내의 모든 미션에서 스레드를 직접 제어하실 필요는 없습니다.
자동차의 위치를 알 수 있는 방법은 여러가지가 있을 수 있는데요
아주 간단한 방법으로는 이동을 시도할 때마다 위치 값으로 출력을 해주시면 됩니다
for (Car car : List<Car> cars) {
car.move();
System.out.println(car.getPosition());
}
그리고 move 메소드를 테스트 할 때 canMove() 를 호출해야 하는데 canMove()는 Random 값이 4이상이었을 때만 테스트가 가능해보이는데.. 일정한 값이 나오는 테스트를 구현할 수 있을까요 ?
이 부분이 미션의 핵심인데요
canMove 메서드 내부에 Random으로 인해 테스트가 어려운 구조로 되어 있습니다
요구사항 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다.
는 조금 더 작은 단위로 나눠볼 수 있습니다
- 자동차는 4이상인 경우 전진한다
- 숫자는 랜덤으로 구한다
위와 같이 2개의 기능으로 나눈다면 자동차는 직접 랜덤으로 숫자를 구할 필요가 없게 됩니다
자동차는 전진하는 조건에 부합하기만 하면 전진하면 됩니다
랜덤으로 구해진 숫자는 외부에서 전달해주면 됩니다
public void move(int number) {
if (canMove(number)) {
이동();
}
}
테스트하고자 하는 내용이 '자동차의 전진'인지 '랜덤 값 구하기'인지 고민해 보시면 좋을 것 같아요
혹시 2차 라이브 강의를 아직 보지 않으셨다면 꼭 보시고 진행하시길 추천드립니다
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.
네 답변 감사합니다 용주님 slack 으로 dm 4일전에 보냈는데 확인을 안해주신것 같아요 ㅠ 확인 한 번 부탁드립니다
2차 라이브 강의 보면서 더 진행해보겠습니다
그리고 어제 깃 푸시 했는데 푸시한 코드가 반영이 안됐을까요 ? 안보이네요..
System.out.println("시도할 회수는 몇 회 인가요?"); | ||
int triedCount = scanner.nextInt(); | ||
|
||
Car[] cars = new Car[givenCars]; |
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.
배열은 공변 문제로 인해 사용을 권장드리지 않습니다 List 인터페이스를 활용해 주세요
package study.racingcar.dto; | ||
|
||
public class InputView { |
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.
inputview가 dto 패키지에 위치하는 것은 적절하지 않은 것 같아요
view 라는 패키지로 이동하면 어떨까요?
결과가 나오게는 구현을 했는데 메소드, 클래스 분리 등
여기서 더이상 어떻게 해야할지 감이 잘 안오네요 ㅠ..
피드백 부탁드려요