728x90
반응형
오늘은 Exception 발생을 고의로 시키고 싶은 상황이 나타났다.
Date Type 을 내가 원하는 4가지 형식으로 정해두고 그 형식에 벗어난다면
Exception 을 발생시켜야 하는데,
그 방법을 잘 모르겠어서 헤매서 주완선배 도움을 받아서 해결했다.
Exception
자바에서 예외란 사용자의 잘못된 조작이나 개발자의 코딩 실수로 인해 발생하는 프로그램 오류를 말한다.
예외가 발생되면 프로그램은 곧바로 종료된다는 점에서 에러와 동일하나
예외는 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지 되도록 할 수 있다.
일단 예외는 두가지가 있다.
- 일반 예외 ( Checked Exception)
- 개발자가 반드시 예외 처리를 직접 진행해야 한다
- Exception 을 상속 받지만 RuntimeException 은 상속받지 않는다
- 실행 예외 ( Unchecked Exception )
- 개발자가 예외 처리를 직접하지 않아도 된다.
- 명시적인 예외 처리가 강제되는 것이 아니다.
- try / chach 를 안해도 좋아~ 하지만 실행을 멈출꺼야!
- JVM 은 RuntimeException 은 상속 했는지 여부를 보고 실행 예외를 판단한다.
실행 예외 종류
- NullPointException
- 참조하는 객체가 없는 상태일 때
- ArrayindexOutOfBoundsException
- 배열에서 인덱스 범위를 초과하여 사용할 때
- NumberFormatException
- 문자열을 숫자로 바꿀 때 숫자로 바꿀 수 없는 문자열을 바꾸려고 할 때
- ClassCastException
- 허용되지 않는데 억지로 타입 변환 시도시
아무튼 내가 발생한 상황에서는 RuntimeException 을 발생 시킨다.
/*
* Date 형식 Check - 변환
*/
public String DateFormatModify(String dateStr) {
if (dateStr.isEmpty() || dateStr.equals("")) {
return "";
}
SimpleDateFormat dateTest;
String dateFormats[] = { "yyyy-mm-dd", "yyyy.mm.dd", "yyyymmdd", "yyyy/mm/dd" };
for (String format : dateFormats) {
dateTest = new SimpleDateFormat(format);
if (validateJavaDate(dateTest, dateStr) == true) {
dateStr = dateStr.replaceAll("[^0-9]", "");
if (dateStr.length() != 8) {
break;
}
return dateStr;
}
}
throw new RuntimeException("Date 형식이 잘못되었습니다. (EX) 2020-01-01 권장.");
}
public static boolean validateJavaDate(SimpleDateFormat dateTest, String strDate) {
if (strDate.trim().equals("")) {
return false;
} else {
dateTest.setLenient(false);
try {
Date javaDate = dateTest.parse(strDate);
} catch (ParseException e) {
return false;
}
return true;
}
}
RuntimeException 은 모든 예외를 꼭 처리하려고 하면 독이 된다는 생각에 나온 것이다.
try / chach 를 강제하지 않는 상황일 때 ( Unchecked Exception 일 경우에 )
"엥? 이때는 Exception 이 강제로 발생해야해 !" 싶을 때 RuntimeException 사용
728x90
반응형
'개발중 > Java' 카테고리의 다른 글
액셀 / AbstractXlsxView - setContentType (0) | 2021.05.13 |
---|---|
Excel 로딩바 -AbstractXlsxView (0) | 2021.05.06 |
java 에서 문자열이 date 형식인지 확인 후 20200101 형식으로 변환 (0) | 2021.05.03 |
카테고리 완성 기록 (0) | 2021.04.21 |
카테고리 반환 코드 기록 (0) | 2021.04.19 |