Inflearn

인프런 워밍업 클럽 0기 - BE 5일차 과제

느리지만 꾸준하게 2024. 2. 23. 23:57

 

java 코드

  • DiceGame
package com.group.libraryapp.domain.dice;

import java.util.Scanner;

public class DiceGame {
    private static final int DICE_SIDES = 6; // 범위가 달라지면 이 부분만 수정
    private int[] results = new int[DICE_SIDES];

    public static void main(String[] args) {
        DiceGame game = new DiceGame();
        game.startGame();
    }

    public void startGame() {
        int numberOfRolls = getNumberFromUser();
        rollDice(numberOfRolls);
        printResults();
    }

    private int getNumberFromUser() {
        System.out.println("주사위를 던질 횟수를 입력하세요");
        Scanner scanner = new Scanner(System.in);
        return scanner.nextInt();
    }

    private void rollDice(int numberOfRolls) {
        for (int i = 0; i < numberOfRolls; i++) {
            int result = (int) (Math.random() * DICE_SIDES);
            results[result]++;
        }
    }

    private void printResults() { // 결과를 출력하는 함수
        for (int i = 0; i < DICE_SIDES; i++) {
            System.out.printf("%d는 %d번 나왔습니다.\n", (i + 1), results[i]);
        }
    }
}

 

클린 코드

코드가 여러 사용자들이 보았을 때 이해하기 쉽고, 유지보수하기 쉬운 상태를 말한다.

  • 명확한 네이밍 -> 변수, 메서드, 클래스 등의 이름은 명확해야 한다. 이름만 보고 그 기능이 무엇인지 쉽게 파악되어야 한다.
// bad
int n;

// good
int countOfUsers;

 

 

  • 함수의 길이를 최소화 -> 함수는 가능한 짧게 한 가지의 기능만 수행하도록 만들어야 하고, 코드의 가독성을 높이면서, 유지보수를 용이하게 할 수 있다.
// 좋은 예
public void printStudents(List<Student> students) {
    for (Student student : students) {
        printStudent(student);
    }
}

public void printStudent(Student student) {
    System.out.println(student.getName());
}

// 나쁜 예
public void printStudents(List<Student> students) {
    for (Student student : students) {
        System.out.println(student.getName());
    }
}

 

  • 적절한 에러 핸들링 -> 예외 처리는 필수적이며 가능한 예외 상황을 모두 고려하고, 에러 메시지를 사용하는 것이 좋다.
  • 중복 최소화 -> 중복된 코드는 유지보수를 어렵게 하고, 중복을 최소화하려면 메서드 추출, 클래스 추출등의 리팩토링 기법을 사용할 수 있다.
  • 주석의 적절한 사용 -> 주석은 코드를 이해하는 데 도움을 줄 수 있고, 과도한 주석은 가독성을 떨어뜨릴 수 있음. 코드 자체가 명확하게 작성되어야 한다.

참고 : https://hyeju-it.tistory.com/136