- [Java 정리] Exception, Error2022년 07월 15일
- starryeye
- 작성자
- 2022.07.15.:34
Java의 예외에 대해 알아보자.
java의 예외도 객체이다.
따라서 상속 구조를 가지며, 계층이 존재한다.
Java 예외 계층
Throwable
최상위 예외이며 Object를 상속 받고있다.
개발자는 Throwable 예외를 catch로 잡으려고 하면 안된다.
-> 최상위 예외를 잡으면 그 하위 예외도 같이 잡힌다.
-> 아래의 Error 예외도 같이 잡히기 때문이다.
Error
언체크 예외이다.
애플리케이션에서 복구 불가능한 시스템 예외이다.
따라서 개발자는 Error 예외를 catch로 잡으려고 하면 안된다.
Exception
체크 예외이다.
Exception 예외와 하위 예외는 "컴파일러가 체크"하는 체크 예외이다.
(아래의 RuntimeException은 컴파일러가 잡지 않는다.)
RuntimeException
언체크 예외이다.(런타임 예외라고 따로 부르기도 한다.)
RuntimeException 예외와 하위 예외는 "컴파일러가 체크하지 않는" 언체크 예외이다.
Java 예외의 기본 규칙
1. 예외는 잡아서 처리(catch 활용)하거나 호출한 메서드로 던져야 한다.
2. 예외를 잡거나 던질 때는 코드상 지정된 예외와 그 하위 예외까지 모두 처리 된다.
3. 체크 예외는 기본적으로 컴파일러가 체크를 하기 때문에, 처리하거나 던지지 않으면 컴파일 오류를 일으킨다.
4. 예외를 catch로 잡는다면 그 이후엔 정상 로직을 타게 된다. (던져지지 않음)
<예시>
A메서드에서 B메서드를 부르고,
B메서드에서 C메서드를 부르는 구조를 상상해보자.
체크예외
C예외에서 체크 예외가 발생하였다.
체크 예외 이므로 해당 메서드 정의할 때,
"throws XXX" 이라고 붙거나 C메서드 내부에서 try-catch 구문이 존재할 것이다.
try-catch로 잡지 않았다면, 해당 예외는 B메서드로 역으로 돌아간다.
B에서도 마찬가지이다.
"throws XXX" 이라고 붙거나 C메서드 내부에서 try-catch 구문이 존재할 것이다.
언체크예외
C예외에서 체크 예외가 발생하였다.
언체크 예외 이므로..
자바 컴파일러는 개발자가 try-catch로 잡거나 throws 키워드로 처리 하지 않아도 컴파일이 되며,
실행까지 된다.
하지만..
실행 단계에서 어떤 예외가 터진 경우에는 ..
개발자가 특별하게 try-catch 처리 하여 잡지 않았다면.. 해당 메서드가 호출된 역순으로
끝까지 가게 된다.
-> 끝까지 갔는데.. 자바의 main() 쓰레드의 경우 예외 로그를 출력하며 시스템 종료
-> 끝까지 갔는데.. 웹 어플리케이션인 경우엔.. 시스템이 다운되면 안된다..
WAS가 해당 예외를 받아서 처리 하게 되며.. 개발자가 예외 처리를 신경 써서 개발 해두어야 한다.
'Java' 카테고리의 다른 글
[Java 정리] Garbage Collector 1 (0) 2022.07.30 [Java 정리] 내부 클래스 (0) 2022.07.28 [Java 정리] Annotation (0) 2022.04.09 [Java 정리] enum (0) 2022.04.09 [Java 정리] Generics (0) 2022.04.09 다음글이전글이전 글이 없습니다.댓글