본문 바로가기

개발중/Java

JAVA Exception / 에러 일부로 발생 시키기

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
반응형