Dailelog

우테코 7기 프리코스 2주차 회고 본문

카테고리 없음

우테코 7기 프리코스 2주차 회고

Daile 2024. 10. 29. 21:50

이글은 10월 29일 화요일 작성하는 글입니다. 이번 주도 테스트 2개를 통과하였습니다. 하지만 저 스스로에게 아쉬움이 많은 한주 였습니다. 

먼저 이번주에 제가 고민했던 것들에 대해서 이야기 해볼 생각입니다. 

고민사항

1. 경주에 참가하는 자동차 수와 시도 횟수 최대 값을 따로 설정 해줘야하는가?

  "기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다."

라는 내용이 있어 최대 값을 설정 해주기 하였습니다. 

2. InputView에서 readLine의 역할에 대한 고민

public String readLine() {
	String readLine = Console.readLine();
    String trim = readLine.trim();
    if(trim.isEmpty()) {
    	throw new IllegalArgumentException("[ERROR] 경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)");
    }
    return trim;
}
    public String readLine() {
        String readLine = Console.readLine();
        return readLine.trim();
    }

    public String readCarNames(){
        String readLine = readLine();
        if(readLine.isEmpty()) {
            throw new IllegalArgumentException("[ERROR] 경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)");
        }
        return readLine;
    }

경주할 자동차 이름을 받을 때와 시도횟수를 입력받을 때 따로 예외 처리를 하기 위해 readLine의미에 맞게 단순히 한줄을 입력 받게만 변경해주었습니다.  별도에 readCarNames를 추가 추후에 시도횟수를 입력받고 예외처리를 별도 해주었습니다.

 

3. pobi,woni,jun 이 아닌 pobi,,jun 처럼 사이에 공백이 있으면 어떻게 처리 할것인가?

잘못된 입력으로 생각하고 Exception 처리 하였습니다. 

 

4.  파일 디렉토리를 정리해야 하는가?

 racingcar
    ├── Application.java
    ├── controller
    │   └── RacingCarController.java
    ├── domain
    │   ├── Car.java
    │   ├── NumberOfAttempts.java
    │   ├── RacingCars.java
    │   └── RandomNumber.java
    ├── dto
    │   ├── CarDTO.java
    │   └── NumberOfAttemptsDTO.java
    ├── service
    │   └── RacingCarService.java
    └── view
        ├── InputView.java
        └── OutputView.java

정리 하니깐 보기 편해졌습니다.

 

5. Car 객체의 랜덤 무브 테스트는 어떻게 진행하는가?

car 객체 내부 메소드에 random 값을 호출하였지만 자동차 객체에 랜덤 값을 결정하는 것은 car의 역할이 아닌것 같아서 별도 분리하게 되었습니다. 하지만 여전히 랜덤에 대한 테스트는 좀더 찾아봐야 할거 같습니다.

결국 car에서 랜덤값을 결정하여 이동하는 것이 아닌 책임을 분리하기 위해서 별도의 NumberOfAttempts 객체를 만들었습니다. 그런데 결국 테스트 하는 방법을 못찾아서 커뮤니티에서 다른 분들의 코드를 보고 공부할 예정입니다.

 

6.input 과 output 를 static member function 으로 해야하는가 객체 일반 member function으로 해야하는가?

저는 일반 멤버 펑션을 선택하고 컨트롤러에서 RacingCarService 에서 중간 결과를 출력을 데이터 멤버인 OutputView를 레퍼런스를 넘기는 방식으로 OutputView객체에 바운드 시켜서 사용하는 것을 선택했습니다.

    private void play(RacingCarService racingCarService) {
        outputView.printResultMessage();
        racingCarService.play(outputView);
    }
 public void play(OutputView outputView) {
        NumberOfAttemptsDTO numberOfAttemptsDTO = numberOfAttempts.getNumberOfAttemptsDTO();
        int number = numberOfAttemptsDTO.getNumber();
        for (int i = 0; i < number; i++) {
            racingCars.move();
            String states = racingCars.getStates();
            outputView.printRacingCarsState(states);
        }
    }

outputView의 레퍼런스를 넘겨줘도 되는건지 궁금합니다.

LIST