[5일차] 인프런 워밍업 스터디 클럽 0기- BE

image

오늘의 문제는 위 코드를 클린 코드 관점에서 리팩토링하는 것입니다.

 

저는 아래와 같이 함수별로 하는 일을 나누었습니다.

하나의 함수는 하나의 일만 해야 하니까요.

import java.util.Scanner;

/*
* 1. 변수 및 메소드 이름 변경 : 코드의 가독성을 높임
* 2. 배열 사용 : 각 주사위 숫자에 대한 결과를 배열에 저장
* 3. 메소드 분리 : 주사위 던지기와 결과로 메소드를 분리
* */
public class MainClean {
    public static void main(String[] args) {
        System.out.println("던질 주사위 횟수를 입력하세요: ");
        Scanner scanner = new Scanner(System.in);
        int numberOfThrows = scanner.nextInt();

        int[] throwResults = new int[6];
        simulateDiceThrows(numberOfThrows, throwResults);

        printResults(throwResults);
    }

    private static void simulateDiceThrows(int numberOfThrows, int[] throwResults) {
        for (int i = 0; i < numberOfThrows; i++) {
            double randomValue = Math.random() * 6;
            int diceNumber = (int) Math.floor(randomValue);
            throwResults[diceNumber]++;
        }
    }

    private static void printResults(int[] throwResults) {
        for (int i = 0; i < throwResults.length; i++) {
            int diceNumber = i + 1;
            System.out.printf("%d은(는) %d번 나왔습니다.\n", diceNumber, throwResults[i]);
        }
    }
}

주사위의 시뮬레이션을 해주는 simulateDiceThrows 함수와 출력해주는 printResults 함수로 나누었습니다.

클린코드 관점에서 입니다.

 

그런데 한번 더 생각을 해봅니다.

첫번째 코드와 제가 만든 코드를 살펴 봅니다.

저는 아무래도 첫번째 절차지향적인 코드가 더 가독성이 있고 더 유지보수가 쉬워 보입니다.

그럼 코드의 복잡도가 올라가면 어떨까요?

함수가 수백개로 잘게 쪼개 진다면? 추상화를 더 시켜서 더더욱 추상적으로 만든다면?

 

과연 누구든지 와서 유지보수 하기 쉬워질까요?

저는 잘 모르겠습니다.

제 코드가 잘 못 된 것 같습니다.

 

더 좋은 코드가 무엇인지 도저히 모르겠습니다.

좀 도와주세요ㅠㅠㅠ

 

댓글을 작성해보세요.

  • 윤대
    윤대

    저와 비슷한 고민을 하고 계시기에 부끄럽지만 짧은 지식으로 답변을 남겨봅니다!
    확실히 간단한 로직은 절차 지향으로 처리하는 것이 가독성과 유지 보수 측면에서 좋습니다!
    과도한 추상화는 코드의 복잡도를 상승시키니까요!
    그렇다면, 추상화를 왜 하고 언제 하는 것이 좋을까요?
    저는 설계의 변경 가능성이 존재하거나, 다형성(주사위를 6면체가 아니라 20면체를 쓰는 등)을 필요로 할 때, 추상화가 필요하다고 생각해요!
    '좋은 코드에 정답은 없다!'라고 생각하지만, 추상화를 적용하면 좋은 이점을 최대한 쉽게 풀어서 블로그에 작성해보았으니, 읽어보시는 것도 도움이 되실까 싶어 링크 걸어둡니다! 오지랖이었다면, 죄송합니다!
    https://www.inflearn.com/blogs/6712


    jhc
    jhc

    감사합니다. 좋은 글 감사히 읽었습니다 ~

채널톡 아이콘