목차
과제
제시된 코드를 더 좋은 코드로 바꿔보기.
풀이
클린 코드는 한 번도 해 본 적이 없어서 처음 과제를 봤을 때 너무 막막했다... 이걸 어디서부터 해결해야 되는 거지?
먼저 기존에 작성된 코드를 한 번 따라 쳐봤다. 그러자 중복되는 코드가 많다는 느낌이 들었다.
거기다 주사위의 면이 6보다 많으면 코드도 더 많아져야 되는데?😱
1. 각 숫자가 몇 번 나왔는지 카운트하는 코드를 먼저 수정해 보겠다.
현재 주사위 번호가 6까지 있다는 가정 하에 Math.random() * 6으로 0 이상 6미만의 무작위 실수를 생성한다.
Math.random()으로 구해진 값은 실수이기 때문에 각 번호를 카운트할 때 조건이 복잡해졌다. 랜덤으로 구해진 값을 int형으로 변환해 보겠다.
Math.random() * 6으로 나온 값은 6미만의 실수이지 6까지 나오는 것이 아니다. 또한 0은 나오면 안 되기 때문에 구해진 랜덤 값에 +1을 해 줘야 된다.
변수명 'r1, ...'이나 'b'는 무엇을 의미하는지 알 수 없기 때문에 변수명도 의미를 알아볼 수 있도록 수정하고, if문도 switch문으로 수정했다. 왜냐면 switch문이 연속적인 숫자 비교에 더 효율적이고 가독성이 더 좋기 때문이다.
int cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0, cnt5 = 0, cnt6 = 0;
for (int i = 0; i < a; i++) {
int rollDice = (int)(Math.random() * 6) + 1;
switch (rollDice) {
case 1:
cnt1++;
break;
case 2:
cnt2++;
break;
case 3:
cnt3++;
break;
case 4:
cnt4++;
break;
case 5:
cnt5++;
break;
case 6:
cnt6++;
break;
default: break;
}
}
이렇게 했는데... 이것도 코드 양이 조금 줄었다 뿐이지 주사위 번호가 많아지면 변수나 case문이 계속 추가되어야 하는 것은 마찬가지다. 이 방법은 아닌 거 같은데?🤨
2. Dice 클래스를 생성해서 해당 클래스에 모든 메서드를 작성하고 주사위를 굴리고, 숫자를 카운트하는 역할을 하게 만들었다.
package com.group.libraryapp.controller.study;
import java.util.Scanner;
public class StudyD3 {
public static void main(String[] args) {
Dice dice = new Dice(6);
int rollCount = dice.setRollCount();
dice.countDice(rollCount);
dice.printResult();
}
static class Dice {
final int[] diceNumbers; //주사위 번호
public Dice(int diceNumbers) {
this.diceNumbers = new int[diceNumbers];
}
//주사위를 굴릴 횟수를 정한다
public int setRollCount() {
System.out.println("숫자를 입력하세요: ");
Scanner sc = new Scanner(System.in);
return sc.nextInt();
}
//주사위를 굴려 각 숫자가 몇 번 나왔는지 카운트한다.
public void countDice(int rollCount) {
for (int i = 0; i < rollCount; i++) {
int rollDice = (int)(Math.random() * 6) + 1;
diceNumbers[rollDice-1]++;
}
}
//결과를 출력한다.
public void printResult() {
for (int i = 0; i < diceNumbers.length; i++) {
System.out.printf((i+1) + "은 %d번 나왔습니다.\n", diceNumbers[i]);
}
}
}
}
객체를 생성할 때 주사위가 가지고 있는 면을 알려주고, 주사위를 굴렸을 때 각 숫자가 몇 번 나왔는지 카운트해 주었다.
마지막으로 결과를 카운트해주면 완성이다.
오늘도 오래 걸렸지만 과제 끝!👍
'Education > 인프런 워밍업 클럽(BE 0기)' 카테고리의 다른 글
인프런 워밍업 클럽 - BE 0기, 학습 #6 (0) | 2024.02.26 |
---|---|
인프런 워밍업 클럽 - BE 0기, 회고 #1 (0) | 2024.02.25 |
인프런 워밍업 클럽 - BE 0기, 과제 #4 (0) | 2024.02.22 |
인프런 워밍업 클럽 - BE 0기, 과제 #3 (0) | 2024.02.21 |
인프런 워밍업 클럽 - BE 0기, 과제 #2 (0) | 2024.02.20 |