CODE SQUAD/FeedBack 정리

[Review] 사다리 구현 5단계 - 실행결과 출력 (2022/02/22)

샤아이인 2022. 2. 23.

 

코드 리뷰

지난번에 이어서, 리뷰는 Dion이 해주셨다!! 감사합니다 Dion!!

 

1. Scanner의 위치 ?

원래 내가 구현한 코드는 다음과 같았다.

public class InputView {
    public static final String INPUT_PERSON_GUIDANCE_MESSAGE = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)";
    public static final String INPUT_LADDER_SIZE_GUIDANCE_MESSAGE = "최대 사다리 높이는 몇 개인가요?";
    public static final String INPUT_NAME_LENGTH_ERROR_MESSAGE = "이름은 최대 5글자 까지만 가능합니다.";
    private static Scanner scanner = new Scanner(System.in);

    public static String[] requestPerson() {
        System.out.println(INPUT_PERSON_GUIDANCE_MESSAGE);
        String[] names = scanner.nextLine().split(",");
        invalidNameLength(names);
        return names;
    }

    private static boolean invalidNameLength(String[] names) {
        boolean isMatch = Arrays.stream(names).anyMatch(i -> i.length() > 5);
        if(isMatch){
            throw new IllegalArgumentException(INPUT_NAME_LENGTH_ERROR_MESSAGE);
        }
        return isMatch;
    }

    public static int requestHeight() {
        System.out.println(INPUT_LADDER_SIZE_GUIDANCE_MESSAGE);
        return scanner.nextInt();
    }
}

난 InputView를 객체로 만들지 않고 사용하고 싶었다.

따라서 모든 메서드 들을 static으로 선언하였고, Scanner 또한 필드에 static으로 생성하여 사용하였다.

 

하지만 리뷰어님의 생각대로 하나의 객체로 만들어 사용해도 좋을것 같다.

Scanner 객체를 생성하고, 종료하기 까지, 하나의 InputView라는 객체에서 관리하게 만드는 것 이다.

다음번에는 InputView를 객체로 만들어 사용해 봐야겠다.

 

2. 변수의 의미전달

사실 num이라 만든 이유는 Direction이라는 enum에서 RIGHT, LEFT가 충분한 의미를 전달해준다 생각했기 때문이다.

하지만 이건 어디까지나 만든 나의 입장이고...

 

사용하는 사람의 입장에서는 Right의 1 이 뭔 의미인지? Left의 2는 뭔 의미인지? 모를 수 있을것 같다.

따라서 변수명은 directionValue 정도로 바꿔주어야 할 것 같다.

 

3. 알맞은 자료형 배열 사용하기

흠 나는 다음과 같이 생각하였고 질문을 남겨두었다.

colums 배열에는 0, 1, 2 총 3가지 상태가 필요합니다.
0 : 사다리가 없는 상태
1 : 사다리가 오른쪽으로 생성된 상태
2 : 사다리가 왼쪽으로 생성된 상태

이 상황에서 int형 배열을 사용하지 않아도 된다는 의미는?
음 더 작은 자료형인 char 을 사용하여 메모리 낭비를 줄이자 라는 의미 이신가요??
boolean은 0,1 두가지 만 표현할 수 있어 적절하지 않다 생각하였습니다.

 

댓글