인프런 워밍업 클럽 0기 - 백엔드 코스 (과제 5)
문제. 클린 코드를 읽고 다음 코드를 수정해보기
우선 클린 코드라는 지식을 알아보기 위해 다음 블로그의 클린코드 핵심 요약을 살펴보았다.
https://mangkyu.tistory.com/132
여기서 주목한 점은
함수는 하나의 역할만 해야한다.
중복 제거
유의미한 이름을 사용하라
위와 같이 세가지 입니다.
이 부분을 명심하고 리팩토링을 해보도록 하겠습니다.
변수 타입 변경
문제에서 제시된 r1
, r2
, r3
... 등등 랜덤으로 나타난 숫자를 카운팅하기 위한 변수가 따로 존재하는 것은 굉장히 불편하다고 생각하여 배열로 표시해주었습니다.
// 이전
int r1=0, r2=0, r3=0, r4=0, r5=0, r6=0;
// 변경
int[] r = new int[6];
아래 랜덤으로 얻어올 숫자를 반복되는 if
, else if
문으로 처리하지 않기 위해서도 배열로 변경하는 것이 좋을 것 같다고 생각했습니다.
메서드 분리 및 메서드 네이밍
현재 main
함수에 모든 내용이 합쳐져 있습니다. 여기서 메서드로 떼어낼 수 있는 부분을 떼어내주었습니다.
public static void main(String[] args) {
int a = inputTryCount();
int[] r = getRandomNumberCount(a);
printRandomNumberCount(r);
}
이와 같이 변경되면서 호출되는 메서드 명만 보더라도 메인 함수가 어떤 식으로 동작하는지 확인할 수 있습니다.
변수 네이밍
변수 명이 a
, r
등 이 변수가 무엇을 의미하는 것인지 알 수 없습니다.
좋은 네이밍을 통해 해당 변수가 무엇을 의미하는지 빠르게 파악할 수 있도록 해주었습니다.
public static void main(String[] args) {
int tryCount = inputTryCount();
int[] randomNumberCount = getRandomNumberCount(tryCount);
printRandomNumberCount(randomNumberCount);
}
a
변수는 사용자가 시도할 횟수를 나타내므로 tryCount
로 변경해주었습니다.
r
변수는 랜덤 숫자가 나타난 횟수를 저장하므로 randomNumberCount
로 변경해주었습니다.
출력 부분 반복 제거
출력 부분은 모든 출력 변수들을 한 줄씩 반복해서 처리해주고 있습니다.
이와 같이 반복해서 처리해둔다면, 만약 새롭게 출력해야할 변수가 늘어난다면 출력을 위한 코드도 추가되게 되므로 안 좋은 경우라고 생각합니다.
변수를 배열로 바꿔주면서 반복문을 활용할 수 있게 되었으므로, for
문을 통해 코드 중복을 제거해주었습니다.
for(int i=0;i<6;i++){
System.out.println((i+1)+"은 "+ randomNumberCount[i]+"번 나왔습니다.");
}
전체 코드
public class Main {
public static void main(String[] args) {
int tryCount = inputTryCount();
int[] randomNumberCount = getRandomNumberCount(tryCount);
printRandomNumberCount(randomNumberCount);
}
private static int inputTryCount(){
System.out.println("숫자를 입력하세요 : ");
Scanner scanner = new Scanner(System.in);
return scanner.nextInt();
}
private static int[] getRandomNumberCount(int tryCount){
int[] randomNumberCount = new int[6];
for(int i=0;i<tryCount;i++){
int randomNumber = (int) (Math.random() * 6);
randomNumberCount[randomNumber]++;
}
return randomNumberCount;
}
private static void printRandomNumberCount(int[] randomNumberCount){
for(int i=0;i<6;i++){
System.out.println((i+1)+"은 "+ randomNumberCount[i]+"번 나왔습니다.");
}
}
}
댓글을 작성해보세요.