About Me/인프런 워밍업 클럽

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

블로그 주인장 2024. 5. 9.

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

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

 

 

 

본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다.

반응형

댓글