Java - Error, Exception
Error 는 JVM 실행에 문제가 생겼다는 것을 의미한다. JVM 위에서 실행되는 프로그램은 실행 불능이 된다. 개발자는 안타깝게도 Error 에 대처할 방법이 전혀 없다.
Exception 은 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류이다. Exception 이 발생하면 프로그램이 곧바로 종료된다는 점에서는 Error 와 동일하다. 하지만 Exception 은 Exception Handling 을 통해서 프로그램을 종료하지 않고 정상 실행 상태를 유지되도록 할 수 있다.
Virtual Machine Error 의 종류에는 java.lang.OutOfMemoryError, java.lang.StackOverflowError, java.lang.UnknownError, java.lang.InternalError 등이 있다.
Exception 은 두 가지로 나뉜다. Checked Exception 과 Unchecked Exception 이다.
Checked Exception 은 컴파일러 체크 예외라고도 하는데, 자바 소스를 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사하기 때문이다. Checked Exception 에 예외 처리 코드가 없다면 컴파일 오류가 발생한다.
Unchecked Exception 의 경우에는 컴파일 과정에서 예외 처리 코드를 검사하지 않는 예외를 말한다. 컴파일 과정에서 예외 처리 코드를 검사하지 않지만, Unchcked Exception 도 마찬가지로 예외 처리가 필요하다.
Checked Exception 은 Exception 을 상속받는다.
Unchecked Exception 은 RuntimeException 을 상속받는다. RuntimeException 은 또한 Exception 을 상속받지만, JVM 은 RuntimeException 을 상속했는지 여부를 보고 Checked Exception 과 Unchecked Exception 을 구별한다.
RuntimeException 은 컴파일러가 체크하지 않기 때문에 개발자의 역량이 중요하다. 또한 잘못된 RuntimeException Handling 은 성능 및 가독성을 해칠 수 있다. 따라서 RuntimeException 의 핸들링 여부와 핸들링 방법에 따라서 서비스의 품질에 많은 영향을 끼친다.
RuntimeException 중 하나인 NullPointerException 에대해서만 다루어도 방대한 양을 다룰 수 있다.
ex) jdk 1.8 부터 지원되는 Optional, method contract 등
다음 글에서는 보다 구체적인 사례를 통해서 보다 올바른 예외 핸들링에 대해서 정리해보겠다.
댓글
댓글 쓰기