예외(Exception) 처리
예외 (Exception)처리 란?
- 에러로 인한 프로그램 수행이 중단 될 경우를 대비하여, 에러가 발생할것을 대비하여 이를 소스상에서 대처 하고 프로그램이 정상적으로 수행 되도록 해주는 기능이다.
예외처리 코드 및 실행 순서 (Try - Catch - Finally)
1. Try 블록 : 실제 코드가 들어가는 곳, 예외 Exception이 발생할 가능성이 있는 코드
2. Catch 블록 : Try 블록에서 Exception이 발생하면, Catch 블록으로 넘어온다, Catch 블록에서 예외에 대한 처리 코드를 작성
3. Finally 블록 : Try 블록에서의 Exception과 발생 유무와 상관없이 무조건 수행되는 코드 블럭, 생략 가능
실행 예외
- 작성자가 코드에서 발생한 에러를 감지하고 에러 처리 코드를 작성한다
일반 예외
- 컴파일러가 자동으로 일반 예외를 감지하고 예외 처리 코드를 사용 하도록 강제 예외 발생
다중 catch
- 다중 catch 사용 시 try 블록 내부에서 일어나는 예외처리를 다중으로 처리 할 수 있다
- 설정한 catch구문 모두 다 예외가 걸러지는것이 아닌 가장 먼저 발견된 예외 처리 후 종료 된다.
- catch 순서는 상위 예외 클래스가 하위 예외 클래스보다 아래 쪽에 위치 해야 한다.
- 예외처리를 한번에 N개 하려면 " | " 를 통하여 예외를 연결하여 처리하면 된다 (멀티 예외처리)
try - with - resource
- 예외가 발생하면 close() 메소드를 자동으로 호출 해주는 예외 처리 방법
- try에 선언한 객체는 반드시 AutoCloseable 인터페이스를 구현해야 한다.
• 사용법
try ( 객체 선언 ){
} catch (예외 ){
}
예외 떠넘기기 (throws)
- 예외가 발생한다면 해당 메서드 내 에서 예외 처리를 하여 프로그램이 종료되지 않게 진행해야 하지만 throws를 활용하여 메서드 선언부에 설정해 준다면 해당 메소드가 실행되는 곳에서 예외처리를 진행 할 수 있다.
사용자 정의 예외 발생
- 일반 클래스와 같이 생성하며 예외를 상속받아 구현한다.
- Exception을 상속 받으면 컴파일러가 체크하는 일반예외, RuntimeException을 활용하면 실행예외로 예외 처리 클래스를 만들 수 있다.
• 사용법 (예외 처리명은 ...Exception 으로 작명하는게 관례)
public class 예외처리명 extends [ Exception | RuntimeException ] {
public 예외처리명() {} // 생성자
}
- 위와 같이 선언한 후 실제 사용 하는 부분에서 throw new 예외처리명 으로 선언해주어 예외를 발생 시킬 수 있다.
예외 발생 시키기
throw new Exception();
throw new Exception("메세지")
예외 정보 얻기
getMessage() // 해당 에러 메세지 출력
printStackTrace() // 예외 발생 코드를 추적해서 모두 콘솔에 출력