/*
예외타입 - throw Exception;
예외 객체 - throw new Exception();
<예외>
◎ 예외(Exception)를 포함하는 자바 언어에서 발생할수 있는 모든 오류의 타입은 Throwable(java.lang.Throwable) 클래스를
상속받는 모든 것들을 의미한다.
<예외의 구조>
-(16) 예외 (1).png 그림 참조
◎ throws,throw,catch 대상이 되는 모든 타입(혹은 객체)은 java.lang.Throwable 을 상속 받는다.
◎ java.lang.RuntimeException 을 상속받는 모든 예외(Exception)는 빌드(Build)전까지 예외 스코프 및 유효성 검사를 하지 않는다.
◎ 그런 이유로 java.lang.RuntimeException 을 상속 받는 모든 예외를 언체크(드) 예외(unchecked Exception,확인되지 않은 예외)
라고 하며, java.lang.RuntimeException 을 상속 받지 않는 모든 예외를 체크(드) 예외(Checked Exception, 확인된 예외)
라고 한다.
◎ java.lang.Error 및 이를 상속 받는 모든 에러(Error)는 직접 상속 받아 사용하지 않는다.
<메서드 예외 시그니처>
◎ (8) 메서드파일 참고
...[throws [예외,...]]?{...}
<예외 발생시키기>
◎ 고의로 어떠한 예외를 발생시키고자 할때 아래와 같이 사용할 수 있다.
throw [예외 객체];
가령, java.lang.Exception 타입의 예외를 발생 시키기 위해 아래와 같이 실행할 수 있다.
throw new Exception("예외 메세지");
◎ throw 키워드를 사용하여 예외를 발생시킬 경우 해당 위치에서 즉시 해당 메서드 실행이 중단되고 호출자로 실행점이 넘어간다.
return 처럼.
<예외 처리하기>
◎ 특정 코드를 실행하면서 발생할수 있는 예외가 발생했을 경우 오류를 이르키며 프로그램을 종료하는 것이 아니라,
내가 원하는 예외 로직을 실행하기 위해 사용한다.
try{
// 예외가 발생할 가능성이 있는 코드
// try {} 구현부 실행 중 예외가 발생한 구문에서 바로 catch{} 구현부의 실행점으로 옮겨감에 유의한다.
} catch ([처리할 예외 선언]) {
// 예외가 발생했을 경우 실행할 코드
// 위 try {} 코드를 실행하며 예외가 발생하지 않을 경우 해당 catch {} 구문이 실행되지 않음에 유의한다.
} finally{
// try {} 구문이 예외 없이 성공적으로 실행이 되든, 예외가 터져서 catch {} 구문이 실행되든 반드시 실행함을 보장 받을 구문
// try {} 및 catch {} 구현부와 달리 생략할수 있다.
// finally {} 구현부를 사용하고자 할 때에는 반드시 try-catch 문의 가장 마지막에 적는다.
}
하나의 try 문 안에서 발생할수 있는 예외가 여러개이고, 각 오류에 대해 다른 로직을 실행하고자 할 떄 아래와 같이 catch 를
여러개 사용할수 있다.
try{
} catch ([처리할 예외 A 선언]){
} catch ([처리할 예외 B 선언]){
} catch ([처리할 예외 C 선언]){
} finally{
}
단, 선행하는 예외의 타입이 후행하는 예외의 타입보다 부모여서는 안된다.
<Try With Resource>
◎ Try With Resource 는 try 문 실행 종료시(catch 종료 포함) 모든 경우에 AutoCloseable(java.lang.AutoCloseable)
인터페이스를 구현하는 객체의 close() 메서드를 호출하는 것을 보장한다.
◎ 주로 JDBC(Java Database Connector) 개발시 JVM 과 DBMS 간의 연결 객체가 닫히지 않아 Connection Leakage(Leak)가 발생,
어느 시점부터 JVM 에서 DBMS 로 연결하지 못하는 사고를 방지하기 위해 사용한다.
try ([AutoCloseable 을 구현하는 객체]) {
} ...
*/