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

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

클린코드

  • 의도를 분명히 밝혀라

    • 변수, 함수, 클래스 등의 이름은 코드의 의도를 잘 표현할 수 있도록 지어야 하며, 이름만으로도 코드가 하는 일을 예측할 수 있도록 해야 한다.

  • 조건 캡슐화

    • 조건의 의도를 분명히 밝히는 함수로 표현해야한다.

  • 객체 생성에 유의미한 이름을 사용하라

    • 객체의 생성자를 오버로딩 하는 경우 어떤 값으로 어떻게 생성되는지 정보가 부족할 수 있다.

      • (이런 경우, 정적 팩토리 메소드를 사용하여 인수를 설명하는 이름으로 작성하는 것이 명확하다.)

  • 서술적인 이름 사용

    • 서술적인 이름을 사용하면 개발자 머릿속에서도 설계가 뚜렷해지므로 코드를 개선하기 쉬워진다.

      • 이름을 붙일 때는 일관성이 있어야 한다. 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용하자.

  • 명령과 조회를 분리해라

    • 함수는 뭔가를 수행하거나 뭔가를 조회하거나 하나의 역할만을 해야 한다.

  • 오류코드보다는 예외를 사용해라

    • 오류 코드를 반환하면 그에 따른 분기가 생기고, 또 분기가 필요한 경우엔 중첩되기 마련이다.


 

문제

최대한 클린하지 않게 작성된 아래 코드는 다음과 같이 동작합니다.

  • 주어진 숫자를 하나 받는다.

  • 해당 숫자만큼 주사위를 던져, 각 숫자가 몇 번 나왔는지 알려준다.

image

 

풀이

public class Main {
    public static void main(String[] args) throws Exception{
        System.out.println("숫자를 입력하세요 : ");
        Scanner scanner = new Scanner(System.in);
        //주사위를 던질 횟수
        int diceThrow = scanner.nextInt();
        // 1~6까지 주사위가 나온 횟수를 저장하는 배열
        int[] count = new int[6];

        for (int i = 0; i < diceThrow; i++) {
            double roll = Math.random() * 6;
            int result = (int) roll + 1;
            count[result - 1]++;
        }
        for (int i = 0; i < count.length; i++) {
            int counts = count[i];
            System.out.printf("%d는 %d번 나왔습니다.\n",i + 1,counts);
        }
    }
}

image

ex)12면체 주사위일경우

public class Main {
    public static void main(String[] args) throws Exception{
        System.out.println("숫자를 입력하세요 : ");
        Scanner scanner = new Scanner(System.in);
        //주사위를 던질 횟수
        int diceThrow = scanner.nextInt();
        // 1~12까지 주사위가 나온 횟수를 저장하는 배열
        int[] count = new int[12];

        for (int i = 0; i < diceThrow; i++) {
            double roll = Math.random() * 12;
            int result = (int) roll + 1;
            count[result - 1]++;
        }
        for (int i = 0; i < count.length; i++) {
            int counts = count[i];
            System.out.printf("%d는 %d번 나왔습니다.\n",i + 1,counts);
        }
    }
}

저장 받을 배열을 12로 늘려주고 radom을 12까지 받으면 된다.

 

댓글을 작성해보세요.

채널톡 아이콘