아이티클래스

예외(Exception)

2020. 4. 1. 08:25

예외(Exception)


예외(Exception)는 자바 프로그램 수행 중 발생하는 프로그램의 오동작을 일컫는 말이다. 이러한 오동작을 막기 위해서 자바는 예외 처리(Exception Handling)라는 에러 감지 기법을 제공하고 있다. 예외 처리는 클래스 내의 메소드에서 에러가 발생할 경우 예외(Exception)를 던지게(throw) 된다. 예외를 인수로 받는 코드는 예외를 잡아(catch) 적절한 처리를 한다. 이러한 적절한 처리에는 사용자에게 에러를 알려주고 프로그램을 종료하는 것이 해당될 수 있을 것이다.

예외 상황이 발생하였을 경우 던져지는 예외는 객체로 만들어져 있기 때문에 이를 이용하게 되면 예외가 발생한 상황에 대한 정보를 얻을 수 있다. 예외 객체는 가장 최상위 클래스인 java.lang.Object로부터 파생한 java.lang.Throwable 클래스로부터 상속받으며 이 Throwable클래스는 Error 클래스와 Exception 클래스가 상속받게 된다.




Error계층
Error 클래스의 계층에서 발생되는 예외는 프로그램 실행 중 발생할 확률이 적은 예외들로서 자원 고갈이나 jvm 내부의 에러와 같이 프로그램에서 처리할 수 없는 치명적인 에러들로 구성되어 있다. 이러한 에러가 생기게 되면 우리는 적절한 에러메세지를 화면에 출력하는 정도의 일밖에 할 수 없다.

Error를 발생시키는 클래스와 발생 원인은 다음과 같다.
AWTError - 심각한 Abstract Window Toolkit 오류가 발생할 때
ThreadDeath - 실행중인 스레드가 중지되었을 때
LinkageError - 클래스가 일치하지 않거나 존재하지 않을 때
VirtualMachineError - 자바 가상 머신에 심각한 문제가 발생했을 때



Exception 예외
Exception 예외는 Error 예외보다 더 많이 발생되며 Exception 예외는 프로그래머가 충분히 주의를 기울여 작성하게 되면 막을 수 있는 예외들이다. 프로그램 작성시 예외가 발생하지 않도록 코드를 작성하거나 발생할 가능성이 있다면 적절한 처리를 하여 예외가 발생하지 않도록 해야한다.

Exception 예외는 컴파일러에 의해 검사된 예외(Checked Exception)과 검사되지 않은 예외(Unchecked Exception)로 구분된다. 검사된 예외가 메소드에서 발생할 가능성이 있다면 메소드에 예외를 발생시킨다는 것을 명시적으로 선언해야 하며 코드 내에서 발생할 경우에는 예외를 다루는 적절한 코드를 추가해야 한다. 하지만 검사되지 않은 예외는 검사된 예외와 같은 처리를 하지 않아도 컴파일러에 의해 에러가 발생하지 않는다. 하지만 예외가 발생할 경우에는 검사된 예외나 검사되지 않은 예외 모두 예외 메세지를 화면에 출력하면서 프로그램을 비정상적으로 종료시키게 된다.

검사되지 않은 예외(Unchecked Exception)에는 Runtime Exception이 속하며 그 클래스와 발생 원인을 알아보자.

ArithmeticException - 0으로 정수를 나눌 때와 같이 적절하지 않은 계산 중 발생

ArrayStoreException - 객체 배열에 잘못된 객체 유형을 저장하려고 할 때 발생

ClassCastException - 코드가 인스턴스에 없는 서브클래스로 객체를 보내려 할 때 발생

EmptyStackException - 스택이 비었음을 나타내기 위해 Stack 클래스에 있는 메소드에 의해 발생

lllegalArgumentException - 메소드가 잘못되었거나 부적합한 인수를 전달할 때 발생

lllegalMonitorStateException - 스레드가 객체의 모니터를 기다리고 있음을 나타내거나, 지정된 모니터를 갖지않고 객체의 모니터를 대기하는 다른 스레드에게 알리려 할 때 발생

lllegalStateException - 틀린 시간 또는 부적합한 시간에 메소드를 호출했음을 나타내기 위해 발생

indexOutOfBoundsException - 배열, 문자열, 벡터에서 색인이 범위를 버어난 경우 발생

NegativeArraySizeException - 응용프로그램이 크기가 음수인 배열을 작성하려고 시도하는 경우 발생

NoSuchElementException - 열거(enumeration)에 구성요소가 없음을 나타내기 위해 enumeration의 nextElement 메소드에 의해 발생

NullPointerException - 응용프로그램이 객체가 필요한 경우 null을 사용하려고 시도할 때 발생

SecurityException - 보안 위반을 표시하기 위해 보안 관리 프로그램에서 발생


'Java' 카테고리의 다른 글

잘못 사용하면 Exception 발생 시키는 형 변환(casting)  (1) 2020.04.24
try/catch문  (1) 2020.04.02
for문  (0) 2020.03.31
if-else문 , switch문  (0) 2020.03.31
산술 연산자(+, -, *, /, %)  (0) 2020.03.30

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band