상세 컨텐츠

본문 제목

[자바]예외(Exception)처리_try catch fianlly 구문/ try with resource 구문

java_자바

by 쫑메이 2020. 8. 19. 00:32

본문

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

프로그램을 실행하는 중에 문제가 생긴다면 자바는 이것을 어떻게 처리할까?

프로그램이 꺼지게 놔둘까?

아님 사전에 대책을 세워줄까?

 

 

 

 

 

 

 

 

 

 

 


자바_예외(Exception)란?


 

 

프로그램 실행 중에 발생하는 의도치 않는 상황, 즉 문제를 만나게 된다.

예외 발생 하면 프로그램이 실행 도중 비정상적으로 종료된다

이 예외가 발생시점부터는 나머지 코드가 실행되지 않는다

그래서 예외처리를 통해 프로그램을 정상적으로 종료하도록 해야하는데

이때 사용하는 것이 바로 (예외 처리)Exception Handling이라고 한다

 

 

자바에서는 잘 짜인 상속계층 구조로 예외 관련 클래스들을 제공한다

 

 

예외와 관련된 최상위 클래스는 Throwable이다

하지만 대부분 Throwable을 상속받은 Exception이나 Eror가 주로 사용된다

하지만 Eror는 예외처리 대상으로 보지 않기 때문에 나머지 Exception클래스와

그 하위 클래스가 주요 처리 대상이 된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


자바_ 예외와 오류의 차이점


 

 

오류(Error)는 메모리가 부족하거나 메서드끼리 호출을 무한 반복하는 것처럼

일단 발생하면 복구하거나 되돌릴 수 없는 심각한 상황을 말한다.

그래서 이 오류에 대한 처리방법은 오류를 발생하는 요인을 찾아서 없애는 디버깅뿐이다

 

 

 

하지만 예외(Exception)는 오류와 비교하면 심각도가 낮으며

프로그램의 정상적인 흐름을 방해하는 상황이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 


자바_ 예외(Exception)의 종류


 

 

1. Compile Checked Exception 계열

컴파일 시점에서 예외 발생 여부를 알수 있음

예외 처리를 하지 않으면 컴파일 에러가 발생한다

ex) SQLException, IOException 등

 

 

 

 

 

2. Compile Unchecked Exception계열

컴파일 시점에서는 예외 발생 여부를 알 수 없고, 실행 시점에 알수 있음

예외를 처리하지 않더라도 컴파일 에러 발생하지 않음

RuntimeException 계열

(ArithmeticException, ArrayIndexOutOfBoundsException, NullPointerException 등)

 

 

 

 

 

 

이 두계열의 차이점은 컴파일 시점에 예외 상황에 대한 대비코드(try~ catch)가 있는지

체크하는 여부에 있으며 Checked Exception과 Unchecked Exception으로 불린다

 

Checked Exception은 예외 상황이 있는데 예외처리 코드가 없을 경우 컴파일 오류가

발생하니 반드시 예외코드 작성을 해야 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


자바_ 예외(Exception)처리 기법


 

 

예외처리를 위해서는 try~ catch문으로 사용한다

try 블록 내에 예외가 발생할 것으로 예상되는 코드들을 작성하고

catch 블록 내에 특정 예외 발생 시 수행할 동작(예외 처리 코드)을 기술

단, 발생한 예외를 처리할 수 있는 예외 클래스 변수 선언 필요함

 

 

 

 

 

 

 

 

 

 

 


자바_ 예외(Exception)처리 실전 예제(1)


 

 

 

예외가 발생해도 예외처리가 되어 있지 않을 경우

intnum=5;

intnum2=0;

System.out.println(num/num2);

 

나눗셈 두 번째 피연산자가 0이면, ArithmeticException예외 발생함

여기서 비정상적인 종료가 일어난다

 

 

 

ArithmeticException예외는 RuntimeException계열이므로 컴파일 에러가 발생

따라서 코드상에서 예외 감지가 어려우므로 직접 찾아서 예외 처리를 해야 함!!!!!

 

 

 

 

 

 

 

 

 

 

 

 


자바_ 예외(Exception)처리 실전 예제(2):

여러 개의 예외를 처리하는 경우


 

catch 블록을 해당 예외 갯수만큼 생성하여 각각의 예외클래스를 명시하거나

상위 예외 클래스를 하나 선언하여 한꺼번에 처리 가능

 

 

아래 2군데서 예외 발생 가능성이 있는 코드가 있다

intnum=5;intnum2=1;

System.out.println(num/num2);

 

 

int[]arr= {1};

System.out.println(arr[1]);

 

 

 

 

 

 

 

 

 

 

 

 

 

배열 크기가 1이므로 1번 인덱스는 존재하지 않음(0번만 존재)

따라서, ArrayIndexOutOfBoundsException 예외 발생함

만약, ArrayIndexOutOfBoundsException 예외 처리 catch 문이 없으면

또 다시 프로그램은 비정상적으로 종료된다

 

 

 

 

 

 

 

 

DriverManager.getConnection("11","admin","224");를 추가하면 또 예외가 발생

 

 

이것은 SQLException 예외로 별도의 catch 블록을 사용하여 처리하거나

모든 예외를 하나로 묶을 수 있는 상위클래스인 Exception 타입으로 처리 가능

 

 

 

단 catch블록은 위에서부터 차례대로 실행되므로 처리순서에 주의해야 한다

 

ArithmeticException보다 상위 타입인RuntimeException은

더 아래쪾의 catch블록에서 처리해야 한다

 

 

 

예외 발생시 전달되는 예외 객체(e)를 사용하여 예외 원인 파악 가능

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


자바_ 예외(Exception)정보를 얻기 위한

throwable주요 메서드


 

1. printStackTrace()메서드: 발생 원인, 위치, 메서드 호출 스택까지 모두 파악

 

 

2. getMessage(): 예외 발생 원인을 문자열로 리턴.

그래서System.out.println() 출력문이 필요함

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

자바_ 예외(Exception): catch( )문 주의사항


 

1. 상속관계에 있는 예외를 처리하기 위해서는 자식 예외부터

조상으로 예외의 순서로 catch( ){ }을 작성해야 한다

 

 

2. catch(ClassNotFounException| FileNotFoundException e ){

'| =or '성격은 비슷하지만 관계없는 것들을 '|  '로 묶어서 처리가능.

이것을 멀티 catch라고 한다

 

 

 

 

 

 

 

 

 

 

 


자바_ 예외(Exception): 

try~ catch~ finally구문


 

try~ catch~ 블록은 추가로 finally블록을 가질 수 있다.

 

finally블록은 예외 발생 여부와 상관없이 반드시 실행되어야 하는 내용을 작성한다

 

심지어 중간에 return문이 코드 중간에 있으면 호출한곳으로 가야하는데

try~ catch~ finally구문안에 return문을 만날 때에도 먼저 finally블록을 실행후

return문을 실행하러 간다

 

 

finally구문의 주요 목적은 try블록에서 사용한 시스템 자원의 반납처리에 있다.

시스템 자원이란 데이터베이스 접속을 위한 Connection이나 파일 I/O를 위한 Stream등이 있다

 

이 시스템 자원은 유한해서 반드시 반납되어야 하는데 만약 반납이 안되면

리소스 릭(resource leak)이 발생한다

 

finally에서 시스템자원을 반납하는 역할을 한다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


자바_ 예외(Exception): try~ catch~ finally 

(정상 vs 오류발생 실행순서)


 

 

 

만약 try블록 내에서 예외 발생시, try블록 내의 나머지 코드는 실행되지 못한다

단, catch블록에서 해당 예외를 찾아 예외처리 코드를 실행한 후

try~catch블록 바깥 코드들은 정상적으로 실행된다

 

 

try안의 내용이 정상일 때와 비정상일 때 실행순서가 다르다..

try가 정상일 때는 try구문 실행하고 {}밖으로 나간다

하지만 try가 비정상일 때는 try구문 {}밖으로 나가서 catch구문으로 간다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


자바_ 예외(Exception):

 try~ with~ resource구문


 

 

자원자동 반환을 한다

finally에서 .close을 자동으로 해준다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

ㅣ읽느라 수고 많으셨어요~ㅣ

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

부족한 글을 읽어주셔서 감사드립니다

아직 부족한게 많으니

틀린 곳이 있다면

조언의 말씀 꼭 부탁드립니다!!!!

 

 

 

 

 

 

 

 

 

 

 


 

 

반응형

관련글 더보기