BE 5일차 과제
인프런 워밍업 클럽 1기 BE 5일차 과제를 구현해보겠습니다.
제시된 코드를 읽어보며, 클린 코드로 변경해보겠습니다.
클린 코드
클린 코드는 소프트웨어의 품질을 결정짓는 핵심 요소 중 하나입니다.
명확하고 간결한 코드는 버그를 줄이고, 개발 속도를 향상시키며, 팀 내 커뮤니케이션을 원활하게 만듭니다.
또한, 잘 작성된 코드는 시간이 지나도 이해하기 쉬워, 유지 보수와 확장에 이점을 제공합니다.
클린 코드의 원칙
클린 코드의 대표적인 원칙에 대해 알아보겠습니다.
1. 명확한 이름 사용
변수, 함수, 클래스 등의 이름은 그 역할이 무엇인지 명확하게 드러내야합니다.
의미 있는 이름을 사용하면 코드의 가독성이 크게 향상됩니다.
// 나쁜 예
boolean flag = true;
// 좋은 예
boolean isUserLoggedIn = true;
2. 중복 최소화
DRY(Don't Repeat YourSelf) 원칙에 따라 중복된 코드는 최대한 줄여야합니다.
중복을 줄이면 코드의 일관성이 유지되고, 수정이 필요할 때는 변경해야할 부분이 줄어듭니다.
3. 함수는 한 가지 일만 해야한다.
함수는 가능한 작게 만들고, 오직 한 가지 일만 해야합니다.
이렇게 하면 함수의 재사용성이 높아지고, 테스트하기도 쉬워집니다.
4. 주석은 필요한 경우에만 사용한다.
코드 자체가 설명이 될 수 있도록 작성하는 것이 이상적입니다.
주석은 코드의 목적이나 의도를 전달하는 데 필요한 경우에만 사용해야합니다.
// 직원에게 복지 혜택을 받을 자격이 있는지 검사한다.
if ((employee.flags & HOURLY_FLAG) && (employee.age > 65))
if (employee.isEligibleForFullBenefits())
5. 일관성 있는 스타일
코드 스타일은 팀 내에서 일관성을 유지하는 것이 중요합니다.
이는 코드를 읽고 이해하는 데 도움이 됩니다.
제시된 문제(코드)
아래의 코드의 동작에 대해 설명하겠습니다.
1. 숫자를 하나 입력받습니다.
2. 해당 숫자만큼 주사위를 던져, 각 숫자가 몇 번 나왔는지 출력합니다.
public class Example {
public static void main(String[] args) {
System.out.println("숫자를 입력하세요 : ");
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int r1 = 0, r2 = 0, r3 = 0, r4 = 0, r5 = 0, r6 = 0;
for (int i = 0; i < a; i++) {
double b = Math.random() * 6;
if (b >= 0 && b < 1) {
r1++;
} else if (b >= 1 && b < 2) {
r2++;
} else if (b >= 2 && b < 3) {
r3++;
} else if (b >= 3 && b < 4) {
r4++;
} else if (b >= 4 && b < 5) {
r5++;
} else if (b >= 5 && b < 6) {
r6++;
}
}
System.out.printf("1은 %d번 나왔습니다.\n", r1);
System.out.printf("2은 %d번 나왔습니다.\n", r2);
System.out.printf("3은 %d번 나왔습니다.\n", r3);
System.out.printf("4은 %d번 나왔습니다.\n", r4);
System.out.printf("5은 %d번 나왔습니다.\n", r5);
System.out.printf("6은 %d번 나왔습니다.\n", r4);
}
}
문제(코드) 리팩토링
import java.util.Scanner;
public class Example {
public static void main(String[] args) {
System.out.println("숫자를 입력하세요 : ");
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int[] dice = new int[6]; // 결과를 저장할 배열
for (int i = 0; i < a; i++) {
int b = (int) (Math.random() * 6); // 범위 0~5의 정수
dice[b]++; // 해당 인덱스의 값을 1 증가
}
for (int i = 0; i < results.length; i++) {
System.out.printf("%d은 %d번 나왔습니다.\n", i + 1, dice[i]);
}
}
}
기존 코드 대비 리팩토링 변화에 대해 설명해보겠습니다.
1. 변수 r1 ~ r6 까지를 하나의 배열 dice로 대체하여 코드의 양을 줄이고 관리를 용이하게 합니다.
2. 기존 코드에서 b의 값을 비교할 때 매번 범위를 체크하는 방식에서 Math.random()의 결과를 6으로 곱한 후 정수로 변환하여 배열 인덱스와 직접 매핑하도록 변경했습니다. 이 방식은 코드의 가독성을 높이고, 불필요한 조건문을 줄입니다.
3. 결과를 출력하는 부분을 반복문으로 처리하여 코드의 중복을 제거했습니다.
❗ 즉, 이러한 리팩토링을 통해 코드의 양을 줄이고, 가독성을 향상시켰으며, 유지 보수성을 높일 수 있었습니다.
마무리
클린코드는 개발자로서의 성장과 팀 프로젝트의 성공에 필수적인 것을 알 수 있습니다.
코드를 작성할 때 클린 코드의 원칙을 항상 염두에 두고, 지속적으로 코드를 개선해 나가는 것이 중요합니다.
클린 코드는 단순히 코드를 아름답게 만드는 것이 아닌, 더 나은 소프트웨어를 만들기 위한 것임을 알 수 있었습니다.
Reference
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다.
'About Me > 인프런 워밍업 클럽' 카테고리의 다른 글
[인프런 워밍업 클럽 1기] BE 6일차 과제 (0) | 2024.05.13 |
---|---|
[인프런 워밍업 클럽 1기] BE 4일차 과제 (0) | 2024.05.07 |
[인프런 워밍업 클럽 1기] BE 3일차 과제 (0) | 2024.05.02 |
댓글