[회고] 우아한 테크코스 5기 프리코스 2주차 회고
본문 바로가기
우아한 테크코스

[회고] 우아한 테크코스 5기 프리코스 2주차 회고

by IYK2h 2022. 11. 9.
728x90

 

이번 과제를 진행하면서 역시 많은 걸 배울 수 있었습니다.

함수를 최대한 분리하고, 함수별로 테스트하기 위해 노력하였습니다. 또한, 객체지향 생활체조 원칙 9가지도 지키려고 노력하였습니다. 

원시 값 포장과 일급 컬렉션

사용자의 Input 값을 주어진 메서드 readLine() 을 사용해 String 값으로 받았고 Computer의 Random 값은 List로 반환하게 하였습니다. 결과적으로 값의 비교는 List로 해야 했습니다.

주어진 입력값은 객체로 포장하여 사용하였는데, 이때 객체로 포장할 때 사용자의 Input 값 String을 List로 변환해서 받을지, String으로 받은 뒤 List로 반환할지 고민을 많이 했습니다.

Class 로 값을 묶어서 사용할 때 방법이 아래와 같이 2가지가 있었습니다.

public class Users {
    private List<Integer> values;
​
    public Users(List<Integer> values) {
        CheckLength(values);
        CheckRange(values);
        CheckDuplicate(values);
        this.values = values;
    }
  ...
}
public class Users {
    private String input;
​
    public Users(String input) {
        CheckLength(input);
        CheckRange(input);
        CheckDuplicate(input);
        this.input = input;
    }
  ...
}

저는 후자의 방식을 선택했습니다. 그 이유는 문자열로 입력받았고, 받은 문자열을 가지고 유효성을 판별하는 것도 나쁘지 않다고 생각했습니다. 또한, 정규 표현식과 indexOf를 사용해 코드 자체를 간결하게 할 수 있었기 때문입니다.

처음부터 값을 List<Integer>로 받았다면 NumberFormatException에 대한 예외 처리를 추가했어야 했습니다. 왜냐면 String에서 바로 Integer 변환하게 되면 NumberFormatException이 발생할 수 있습니다.

이를 통해 유횻값 검사의 순서도 중요하고, 위치가 중요한 것을 배울 수 있었습니다.

 

매개변수의 개수는 몇개 정도가 적당할지

아래 코드를 보면 2중 반복문을 사용하기 위해 메서드 분리했습니다. 하지만 매개변수가 늘어나게 되었습니다.

public int countBall(List<Integer> computer, List<Integer> user) {
  for (int i = 0; i < computer.size(); i += 1) {
    this.ball += hasBall(computer, user, i);
  }
  return this.ball;
}
​
private int hasBall(List<Integer> computer, List<Integer> user, int i) {
  int count = 0;
  for (int j = 0; j < computer.size(); j += 1) {
    if (i == j) continue;
    if (computer.get(i) == user.get(j)) count += 1;
  }
  return count;
}

위 코드와 같이 반복분 안에 반복문을 넣을 때 매개변수가 증가하게 되는데 이런 부분을 많이 고민하게 되었습니다.

 

느낀점

힘들다, 그렇지만 힘든 만큼 재밌다. 짜릿하다.

 

아쉬웠던 부분, 놓쳤던 부분, 다음 과제에 적용할 부분

반복문에 사용되는 변수명

if 문 내부가 한 줄이더라도 블록을 사용해 감싸주는 것 (java convention)

Junit 테스트 제공되고 있는 다양한 어노테이션을 활용하지 못한것

stream 사용해보기

 

코드가 궁금하다면 : https://github.com/iyk2h/java-baseball

728x90

댓글