익셉션
- 잘못된 프로그램 조작 혹은 프로그램의 오류에 의해 발생합니다.
#에러 VS 익셉션
- 에러는 JVM 하단에서 발생해 하드웨어 OS 문제로써 프로그램이 중단됩니다.
- 익셉션은 JVM 위에서 어플리케이션 문제에 의해 발생하고 처리에 따라 프로그램이 중단 할 수도 있고 안할 수 도있습니다.
호출된 메서드의 정상 실행과 비정상 실행
#정상 실행
- return문을 반환하거나 공유변수를 통한 반환 혹은 호출시 넘겨 받은 참조값이 가리키는 객체를 통해 반환을 합니다.
비정상 실행
- 호출된 메서드에서 익셉션이 발생하게 됩니다.
- new로 익셉션 객체를 생성 및 throw 로 생성된 객체를 던집니다.
- 자기 자신이 처리할 경우 try-catch를 이용해 직접 처리합니다.
- 자기 자신이 아닌 자신을 호출한 곳으로 익셉션을 던져 상위에서 처리하게 할 수도 있습니다.
#throw vs throws
- throw는 익셉션을 강제로 발생 시키여 'throw new 익셉션' 으로 발생시킵니다. 이때 자기 자신에서 try-catch로 처리하거나 자기 자신이 처리하지 않을 경우 상위로 넘겨야 합니다. 또한 자기자신이 처리하고 에러 정보를 넘겨 줄 수도 있습니다.
- 상위로 익셉션을 보고할 경우 메서드 부분에서 throws를 통해 익셉션을 나열하면 상위로 보고가 됩니다.
- 상위에서 try-catch로 처리하지 않을 경우 throws로 넘겨주어야 합니다.
일반 익셉션과 런타임 익셉션
- 일반 익셉션은 Exception을 상속하고 컴파일러가 try-catch 익셉션 처리를 검사하는데 보통 심각한 에러들입니다.
- 런타입 익셉션은 RuntimeException을 상속하는데 익셉션 처리를 컴파일러가 검사하지 않고 개발자 경험에 의해 결정이 됩니다.
익셉션 처리
- 익셉션을 어플리케이션이 처리하지 않으면 JVM은 프로그램을 중단시킵니다.
- 그러므로 try블록에서 익셉션 객체 생성 및 던지기를 하고 catch 블록에서 처리해야 합니다.
- 자기 자신이 try- catch로 처리하는 방법이 있습니다.
- 자기 자신이 처리하지않고 throws를 통해 호출한 곳으로 떠넘기는 방식이 있습니다.
- 떠넘기기 하는 메서드를 호출할 때는 try 블록 내부에서 호출하며 catch에서 처리를 하거나 다시 떠넘기기를 해야합니다.
- throw는 try 부분에서 이루어져야 하고 catch랑 세트를 이루어야 합니다.
자동 리소스 반납
- 주로 IO 관련 리소스를 사용할때 반납과정에서 익셉션이 발생할 수 있으므로 확보 및 익셉션 발생 여부와 관계없이 자동으로 리소스 반납을 위해 try블록 이전 ()에 리소스를 확보해야 합니다.
- 개발자가 작성한 리소스의 경우 자동 반납을 위해 AutoCloseable를 구현하고 있어야 합니다.
개발자 정의 익셉션
- 라이브러리 익셉션 이외 개발자가 자신의 어플리케이션에서 사용하기 위해 직접 정의해서 사용하는 익셉션을 말합니다.
- 기본생성자와 오류 원인 표기를 위해 String 매개변수를 가지는 생성자를 사용하여 정의합니다.
자바, WAS, Spring 익셉션
#자바
- 자바의 경우 익셉션을 처리하지 않을 경우 JVM에서 프로그램을 중단합니다.
#WAS
- WAS가 수행하는 프로그램이 중단되면 안되기 때문에 어플리케이션이 익셉션을 처리하지 않을 경우 JVM에 넘기지 않고 자신이 가진 오류 페이지를 보여주게 됩니다.
- 기본 오류 페이지는 사용자에게 적절하지 않기 때문에 사용자가 제대로 알 수 있도록 개발자가 오류 페이지를 작성하여 해당 페이지를 보여주도록 해야합니다.
#Spring
- 비정상 실행의 경우 정상 실행과 동일하게 MVC 패턴으로 처리하기 위해 @ExceptionHandler어노테이션을 사용해 처리합니다.
'학습(구) > Java(구)' 카테고리의 다른 글
| 인터페이스와 람다 (0) | 2021.03.30 |
|---|---|
| 어노테이션 (0) | 2021.03.22 |
| 추상 클래스 및 추상 메서드/final (0) | 2021.03.22 |
| 중첩 클래스와 중첩 인터페이스 (0) | 2021.03.22 |
| 접근 제한자와 패키지 (0) | 2021.03.22 |