자바 오류 관련 클래스 계층 구조
오류란 프로그램을 실행하는데 발생하는 문제를 뜻합니다. 자바에서 오류를 크게 2가지로 나눕니다.
하나는 Error와 다른 하나는 Exception입니다. 그리고 이 둘 모두의 부모격인 클래스가 Throwable이라는
클래스입니다. 오류들은 계층구조를 이루고 있는데 밑에 그림과 같습니다.
Error은 개발자가 손 쓸 수 없는 오류를 뜻합니다. 시스템 레벨에서 발생하기 때문에 개발자가 어떻게 조치할 도리가
없는것이죠. Erorr의 종류로는 쓰레드와 관련된 ThreadDeath나 JVM과 관련된 VirtualMachineError등이 있습니다.
Exception은 프로그램의 잘못된 사용 또는 잘못된 코드 작성에 따라 일어나는 에러를 뜻합니다. 따라서 Error와 다르게
개발자가 조치를 취하면 예방 또는 적절한 처리를 할 수 있는 특징이 있습니다.
Exception은 또 두가지로 나누어지는데 이에 대해서 자세히 살펴보도록 하겠습니다.
Exception
Exception은 크게 CheckedException과 UnCheckecException으로 나뉘게 됩니다.
CheckException
Exception의 하위 클래스 중 RuntimeException을 제외한 나머지 예외 클래스들. 해당 클래스들은 프로그램 내에서
처리되지 않으면 컴파일 시에 오류가 발생합니다. 컴파일 시에 확인이 가능한 특징 때문에 CheckException 이라고 불립니다. 대표적인 예시로는 입출력 관련 예외 클래스인 IOException이 있습니다.
위 코드를 보시면 CheckException의 한 종류인 IOException을 throw new를 통해서 발생시키는 것을 확인할 수 있습니다.
이 상태로 컴파일을 하게 되면 관련된 처리를 해주라는 컴파일 오류가 나타납니다.
다음과 같이 try/catch 문을 사용하여 Checked 예외를 처리해주게 되면 정상적으로 컴파일이 되는 것을 확인할 수 있습니다.
UnCheckedException
UnCheckedException은 RuntimeException과 그 하위 클래스들을 의미합니다. 말 그대로 실행중에 발생하는 예외인
RuntimeException은 컴파일 시에 에러가 확인되지 않기 때문에 UnCheckedException이라고 불립니다.
대표적인 예시로는 NullPointerException이 있습니다.
위의 IOException과 마찬가지로 실제 코드로 작성해보았습니다.
이전 CheckedException과 다르게 컴파일 단계가 아닌 런타임 단계에 에러가 생기는지 확인하기 위하여 다음과 같이
코드를 작성하였습니다.
ExceptionGenerator클래스의 generate 정적 메서드를 통하여 UncheckException 종류 중 하나인 NullPointerException을
Main 메서드 중간에 실행하였습니다.
만약 NullPointerException이 CheckException이라면 컴파일 단계에서 예외가 터지기 때문에 콘솔에서 "실행 시작" 이라는
구문을 볼수 없을 것입니다.
실행 결과는 위와 같습니다. 컴파일이 정상적으로 되었고 메인 메서드의 로직들을 실행하다가 런타임 환경에서 NullPointerException이 발생하였기 때문에 콘솔화면에서 "실행 시작" 이라는 문구를 정상적으로 확인할 수 있습니다.
이상으로 예외 처리 관련 개념 정리를 마치겠습니다.
글 읽어주셔서 감사합니다!
'Java' 카테고리의 다른 글
Inner class에 Static을 붙이는 이유 (0) | 2023.04.24 |
---|---|
제너릭이란? (1) | 2023.04.12 |
추상클래스와 인터페이스 (2) | 2023.04.09 |
자바 변수를 메모리 관점에서 뜯어보기 (0) | 2023.04.01 |
가비지 컬렉션에 대해 (0) | 2023.03.21 |