진도표 5일차와 연결됩니다
우리는 <클린 코드>라는 개념을 배웠습니다. <클린 코드>에 대한 감각을 익히기 위해서는 어떤 코드가 좋은 코드이고, 어떤 코드가 좋지 않은 코드인지 이론적인 배경을 학습하는 것도 중요할 뿐 아니라, 다양한 코드를 읽어 보며 어떤 부분이 읽기 쉬웠는지, 어떤 부분이 읽기 어려웠는지, 읽기 어려운 부분은 어떻게 고치면 좋을지 경험해보는 과정이 필요합니다.
이번 과제는 제시된 코드를 읽어보며, 코드를 더 좋은 코드로 고쳐나가는 과정입니다. 구글에 “클린 코드” 혹은 “클린 코드 정리”를 키워드로 검색해보면, 이론적인 배경을 충분히 찾아보실 수 있습니다. 🙂 그러한 내용들을 보며 제시된 코드를 더 좋은 코드로 바꿔보세요! (코드를 바꿀 때 왜 바뀐 코드가 더 좋은 코드인지 다른 사람에게 설명하신다고 생각해보시면 더욱 좋습니다.)
[제시된 코드]
- 여러 함수로 나누어도 좋습니다! 🙂
- 여러 클래스로 나누어도 좋습니다! 🙂
- 클린 코드를 적용해서 위 코드를 바꾸어보았다.
Main.java
package com.group.libraryapp.day5Practice;
import java.util.Scanner;
class Dice{
private int diceNum;
private int rollNum;
private int[] list;
public Dice(int diceNum,int rollNum) {
//초기화
this.list = new int[diceNum];
this.diceNum = diceNum;
this.rollNum = rollNum;
for (int i = 0 ; i < diceNum; i++)
list[i] = 0;
for (int i = 0 ; i < rollNum; i++){
int randomNum = (int) (Math.random() * diceNum);
list[randomNum]++;
}
}
public int getDiceNum() {
return diceNum;
}
public int getRollNum() {
return rollNum;
}
public int[] getList() {
return list;
}
}
public class Main {
private static int diceNumber,rollDiceNumber;
public static void main(String[] args) throws Exception {
printFrist();
Dice dice = new Dice(diceNumber,rollDiceNumber);
printResult(dice.getList());
}
private static void printResult(int[] diceList) {
for (int i = 0; i < diceNumber; i++) {
System.out.printf("%d는 %d번 나왔습니다.\n", i + 1, diceList[i]);
}
}
private static void printFrist(){
Scanner scanner = new Scanner(System.in);
System.out.print("던지는 횟수를 입력하세요 : ");
rollDiceNumber = scanner.nextInt();
System.out.print("주사위 눈 수를 입력하세요 : ");
diceNumber = scanner.nextInt();
}
}
- 최대한 직관적으로 변수명으로 각 변수의 의미를 파악할 수 있도록 변경했다.
- 반복되는 코드는 한 줄로 해결가능하도록 간단화했다.
- 메서드를 분리해서 코드의 가독성을 향상시켰다. 위에서 Main 함수 내에 총 3개의 메서드 및 생성자가 있음을 볼 수 있다.
- 또한 '한걸음 더' 부분에서 있었던 내용인데, 주사위 수를 하드코딩하지 않게 변수로 설정하여 유동적으로 변경할 수 있도록 하였다.
회고
최대한 같은 변수를 반복하지 않고, 함수화하려고 하였다. 이러한 간단한 기능을 하는 코드에서도 클린 코드가 적용되면 이해하기 깔끔해 지는 것처럼, 여러개의 api 정보들이 있는 controller나 service에서는 필수인 것 같다.