일상

[프리코스 대비반] 3주차 회고 & 느낀 점

꼬ㄴi 2023. 10. 14. 08:27

드디어 3주차 코드 작성까지 완..!

3주차 미션은 로또였다.

코드 구조 빠밤

 

예외처리 부분에서 고민했던 점

👉[ERROR] 랑 경고내용을 e.message(  )에 한 번에 몰지 않고 분리해 놓으면 머리말이랑 내용을 나중에 수정할 때 더 편리하지 않을까? ( Refactoring 진행할 때 하기로)

 

✨게임 실행 클래스

package lotto;

import valid.ValidMessage;

public class Application {
    public static void main(String[] args) throws IllegalArgumentException{
        // TODO: 프로그램 구현
        try{
            String money = camp.nextstep.edu.missionutils.Console.readLine();
            ValidMessage.viewMessage(money);
        }catch (IllegalArgumentException e){
            System.out.println(e.getMessage());
        }finally {
            System.out.println("게임 종료합니다.");
        }
    }
}

 

💣예외처리 클래스 ( valid.ValidMessage.java)

package valid;

public class ValidMessage {

    public static void viewMessage(String money) {
        validateType(money);

        Integer price = Integer.valueOf(money);

        validateLimit(price);
        validateUnit(price);
    }

    private static void validateLimit(Integer price) {
        if (price < 1000) {
            throw new IllegalArgumentException("[ERROR] 최소 입력 금액은 1000원 입니다.");
        }
    }

    private static void validateUnit(Integer price) {
        if (price % 1000 != 0) {
            throw new IllegalArgumentException("[ERROR] 금액은 1000원 단위로 입력해야 합니다.");
        }
    }

    private static void validateType(String money) {
        String regex = "^[0-9]*$";

        if (!money.matches(regex)) {
            throw new IllegalArgumentException("[ERROR] 금액은 숫자 이외의 문자는 입력할 수 없습니다.");
        }
    }
}

 

🟢오류

public class ValidMessage {

    public static void viewMessage(String money) {
    	Integer price = Integer.valueOf(money);
    
        validateLimit(price);
        validateUnit(price);
        validateType(money);
    }
}

검증 순서에 따라 메서드를 나열하니 NumberFormatException 가 발생했다.

진짜 뭐지 싶었다.

 

NumberFormatException 이 발생한 이유는

Integer  타입으로 문자열 파싱하는 작업을 가장 먼저 해주었기 때문인데,
만약 매개변수로 들어온 money가 Integer로 파싱할 수 없는 문자를 포함하고 있을 가능성이 있기 때문에 NumberFormatException이 발생한 것이었다.

 

 

🥦아쉬웠던 부분

1. 커밋 메시지 컨벤션을 더 명확하게 지키지 않은 것

   - 파일명을 괄호에 명시하기, Remove/Rename 등의추가 타이틀을 미리 확인하지 못했다

2. 조금 더 세세하게 분리하지 못한 것

    - 다른 분들 코드를 보니 '이것까지...?' 싶은 것 마저 분리를 하셨기 때문에.. 확장성과 유지보수 측면에서 아주 좋은 코드라는 글을 보았다. 

3. 기능 구현 목록을 디테일하게 작성하지 못한 것

    - 미리 목록을 잡고 구현에 들어가면 많이 수정할 가능성이 높다고 생각해서 대략적으로 작성을 했었는데,

      구현이 진행될수록 목록을 참고할 일이 많아졌기 때문에 + 결국엔 디테일한 부분을 짤 수 밖에 없기 때문에 기능 구현 목록도 수정하는 일이 생겼다. 내가 본 우테코 개발자 분의 아티클에서는 구현은 대략적인 흐름을 파악하고, 코드를 짜면서 그 디테일을 잡아가게 된다고 기재되어 있었지만 아직은 나를 못 믿겠다... 최대한 디테일하게 하면 더 도움이 될 것 같다!

4. 결국 끝까지 작성하지 못한 것

    - 로또 당첨 순위를 enum으로 작성했었는데, 여기서부터 enum을 이용한 로직이 떠오르지 않았다. enum의 개념보다는 객체지향적 코드를 아직 이해하지 못해서 생긴 문제 같다.

 

'일상' 카테고리의 다른 글

[회고] 2024년 1월 회고  (0) 2024.01.31
[프리코스 대비반] 2주차 회고  (0) 2023.09.15
[프리코스 대비반] 1주차 회고  (0) 2023.09.13