Class10(예외 처리)
2023. 01. 13. 수업내용 정리
예외
- 예외(Exception)를 포함하는 자바 언어에서 발생할 수 있는 모든 오류의 타입은
Throwable
(java.lang.Throwalbe
) 클래스를 상속받는 모든 것들을 의미한다.
예외의 구조
throws
,thorw
,catch
대상이 되는 모든 타입(혹은 객체)은java.lang.Throwable
을 상속 받는다.java.lang.RuntimeException
을 상속받는 모든 예외(Exception)는 빌드(Build) 전까지 예외 스코프 및 유효성 검사를 하지 않는다.- 그런 이유로
java.lang.RuntimeException
을 상속 받는 모든 예외를 언체크(드) 예외(Unchecked Exception, 확인되지 않으 예외)라고 하며,java.lang.RuntimeExceptino
을 상속 받지 않는 모든 예외를 체크(드) 예외(Checked Exception,확인된 예외)라고 한다. java.lang.Error
및 이를 상속 받는 모든 에러(Error)는 직접 상속 받아 사용하지 않는다.
메서드 예외 시그니처
- (8) 메서드 파일 참고
예외 발생시키기
- 고의로 어떠한 예외를 발생시키고자 할 때 아래와 같이 사용할 수 있다.
thorw [예외 객체]; //Exception은 곧 타입이므로 변수 처럼 사용가능..
가령,
java.lang.Exception
타입의 예외를 발생 시키기 위해 아래와 같이 실행할 수 있다.throw new Exception("예외 메세지");
throw
키워드를 사용하여 예외를 발생시킬 경우 해당 위치에서 즉시 해당 메서드 실행이 중단되고 호출자로 실행점이 넘어간다.retrun
처럼.
예외 처리하기
- 특정 코드를 실행하면서 발생할 수 있는 예외가 발생했을 경우 오류를 일으키며 종료하는 것이 아니라, 내가 원하는 예외 로직을 실행하기 위해 사용한다.
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을 구현하는 객체]){ } ...
댓글남기기