![[인프런 워밍업 클럽 BE 0기] 5일차 과제](https://cdn.inflearn.com/public/files/blogs/e1572e9c-6f6a-48c7-a697-c9ad61d50b04/image.png)
[인프런 워밍업 클럽 BE 0기] 5일차 과제
2024.02.23
클린코드
의도를 분명히 밝혀라
변수, 함수, 클래스 등의 이름은 코드의 의도를 잘 표현할 수 있도록 지어야 하며, 이름만으로도 코드가 하는 일을 예측할 수 있도록 해야 한다.
조건 캡슐화
조건의 의도를 분명히 밝히는 함수로 표현해야한다.
객체 생성에 유의미한 이름을 사용하라
객체의 생성자를 오버로딩 하는 경우 어떤 값으로 어떻게 생성되는지 정보가 부족할 수 있다.
(이런 경우, 정적 팩토리 메소드를 사용하여 인수를 설명하는 이름으로 작성하는 것이 명확하다.)
서술적인 이름 사용
서술적인 이름을 사용하면 개발자 머릿속에서도 설계가 뚜렷해지므로 코드를 개선하기 쉬워진다.
이름을 붙일 때는 일관성이 있어야 한다. 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용하자.
명령과 조회를 분리해라
함수는 뭔가를 수행하거나 뭔가를 조회하거나 하나의 역할만을 해야 한다.
오류코드보다는 예외를 사용해라
오류 코드를 반환하면 그에 따른 분기가 생기고, 또 분기가 필요한 경우엔 중첩되기 마련이다.
문제
최대한 클린하지 않게 작성된 아래 코드는 다음과 같이 동작합니다.
주어진 숫자를 하나 받는다.
해당 숫자만큼 주사위를 던져, 각 숫자가 몇 번 나왔는지 알려준다.
풀이
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);
}
}
}
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까지 받으면 된다.
댓글을 작성해보세요.