드디어 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 |