1 ) Feedback
- countStrike()와 countBall()에서 input값을 자릿수로 분리하는 코드가 중복됩니다. 별도 메서드로 추출하여 재사용 할 수 있습니다
- 기존의 자릿수 분리하는 코드
ArrayList<Integer> list = new ArrayList<Integer>();
int num = 0;
while (input > 0) { // 입력 받은 숫자를 자릿 수 마다 하나씩 저장
list.add(input % 10);
input /= 10;
}
- 똑같은 코드가 3개의 메서드에 들어가 있기에 중복되는 코드를 하나의 메서드로 따로 만들어준다.
public class BaseballGame {
static ArrayList<Integer> inputlist = new ArrayList<>();
...
public static void numDigits(int input) {
inputlist.clear();
while (input > 0) { // 입력 받은 숫자를 자릿 수 마다 하나씩 저장
inputlist.add(input % 10);
input /= 10;
}
}
}
- 기존 클래스에 static list를 생성하여 여러 메서드에서 사용할 수 있도록 선언 및 생성.
- 입력 받은 숫자의 자릿수를 저장하는 메서드를 따로 만들어주고 해당 코드가 있던 메서드에 해당 메서드 선언.
- numDigits 메서드 실행 시 inputlist를 clear() 해준다.
- why? static으로 선언했기에 초기화를 해주지 않으면 기존의 넣었던 데이터들이 그대로 남아 새로운 input을 넣어도 기존에 있던 데이터들로 인해 데이터 크기 오류 발생.
- 그렇기 때문에 input을 받았을 때 inputlist를 clear을 해준다.
private int countStrike(int input) {
int num = 0;
numDigits(input);
for(int i = 0; i < inputlist.size(); i++) {
if(inputlist.get(i) == ranNum[inputlist.size()-i-1]) { // 정답 숫자와 입력 한 숫자가 같은 위치에 같은 숫자면 strike
num++;
}
}
return num;
}
- input을 받아 numDigits에 input을 넘겨주고 자릿수를 inputlist에 저장하고 선언도 inputlist로 해준다.
- 다른 중복 코드들도 다 변경해주면 끝.
- 이러면 각 메서드마다 계속 Arraylist 인스턴스를 선언 및 생성을 안해주고 되며 inputlist만 가져와 사용하면 되기에 코드가 더욱 효율적으로 변한다.
- Baseballgame 클래스의 ranNum과 같이 반복적으로 사용하는 수들은 상수로 만들어 관리하면 유지보수성이 증가합니다.
- 기존 코드
public class Baseballgame {
...
private static int[] ranNum = new int[3];
public Baseballgame() {
Integer[] arr={1, 2, 3, 4, 5, 6, 7, 8, 9};
List<Integer> arrlist =Arrays.asList(arr);
Collections.shuffle(arrlist);
arrlist.toArray(arr);
// 랜덤 난수 3자리 설정
for(int i = 0; i < 3; i++) {
ranNum[i] = arrlist.get(i);
}
// System.out.println(Arrays.toString(ranNum)); // 빠른 검증을 위해 정답 숫자를 보고 싶을 때 주석 풀어주세요.
}
...
}
- 반복적으로 사용하는 수들을 상수로 선언
public class BaseballGame {
...
private static final Integer[] DIGITS = {1, 2, 3, 4, 5, 6, 7, 8, 9};
private static final int NUMBER_LENGTH = 3;
private static int[] ranNum = new int[NUMBER_LENGTH];
public BaseballGame() {
List<Integer> arrlist =Arrays.asList(DIGITS);
Collections.shuffle(arrlist);
arrlist.toArray(DIGITS);
// 랜덤 난수 3자리 설정
for(int i = 0; i < NUMBER_LENGTH; i++) {
ranNum[i] = arrlist.get(i);
}
System.out.println(Arrays.toString(ranNum)); // 빠른 검증을 위해 정답 숫자를 보고 싶을 때 주석 풀어주세요.
}
...
}
- 접근제어자 final을 사용해서 상수로 선언해준다.
'TIL > Project' 카테고리의 다른 글
Trouble Shooting ( Calender_JPA) (0) | 2024.11.15 |
---|---|
Trouble Shooting ( 일정 관리 앱) (0) | 2024.11.08 |
Trouble Shooting (숫자 야구 게임) (0) | 2024.10.25 |
TIL 2024-10-22 (숫자 야구 게임 - 2) (0) | 2024.10.22 |
TIL 2024-10-21 (숫자 야구 게임 - 1) (0) | 2024.10.21 |