Chapter 3. Exception Handling
1. Exception Handling
- Program Error
· Program이 실행중 어떤 원인에 의해 오작동하거나 비정상적으로 종료되는 경우에 발생하는 Error
· Program Error의 종류
◦ Compile-time Error
▹ Compile 작업 진행 시 발생하는 Error
◦ Runtime Error
▹ Program 실행도중 발생하는 Error
▹ Runtime Error의 종류
▸ Error
▫ Memory 부족(OutOfMemoryError), BOF(Buffer Overflow Error/Stack Overflow Error)와 같은 일단 발생하면 복구할 수 없는 심각한 오류
▸ Exception
▫ 발생하더라도 수습 또는 복구할 수 있는 비교적 덜 심각한 오류
- Exception Handling
· Program 실행 시 발생할 수 있는 예기치 못한 예외(Exception)의 발생에 대비한 Code를 작성하는 것
· Exception은 오류의 한 종류로 수습, 복구가 가능하기 때문에 예외처리(Exception Handling)에 의해 처리가 가능하다.
· Exception Handling의 목적
◦ Program의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것
· Exception Handling 구문
◦ 조건문(if)와 구조가 유사하며 try구문에는 catch구문이 반드시 하나는 있어야 한다.
◦ Example
1 2 3 4 5 | try { ……… } catch (Exception E1) {………} catch (Exception E2) {………} catch (Exception En) {………} | cs |
- try-catch 구문의 흐름
· try Block 내에서 예외가 발생한 경우
◦ 발생한 예외와 일치하는 catch Block이 있는지 확인한다.
◦ 일치하는 catch Block을 찾게 되면 그 catch Block내의 Code들을 수행하고 전체 try-catch문을 빠져나가 다음 Code를 수행한다.
◦ 일치하는 catch Block을 찾지 못하면 예외는 처리되지 못해 Compile-time Error가 발생한다.
· try Block 내에서 예외가 발생하지 않은 경우
◦ catch Block을 거치지 않고 전체 try-catch문을 빠져나와 나머지 Code를 수행한다.
- 예외 발생 Keyword
· throw
◦ 예외를 발생시키는 Keyword
◦ 사용방법
1 2 3 4 | Exception e = new Exception(“[Exception Comment]”); throw e; throw new Eception(); | cs |
▹ Exception 변수를 선언 후 ‘throw [Exception Variable]‘을 작성하면 강제로 예외를 발생시킨다.
- finally Block
· 예외 발생 여부에 관계없이 실행되어야할 Code를 포함시킬 목적으로 사용된다.
· 실행 순서
◦ 예외가 발생할 시 : try → catch → finally
◦ 예외가 발생하지 않을 시 : try → finally
· 사용방법
1 2 3 4 5 6 7 8 9 | try { ……… } catch(Exception e) { ……… } finally { ……… } | cs |
2. Hierarchical Structure of Exception Class
- 계층 구조
· Java는 실행 시 발생할 수 있는 오류를 Class로 정의했으며 위와 같은 계층적 구조로 정의하였다.
· 반드시 처리해야 하는 Exception
◦ RuntimeException Class : Programmer의 실수로 발생하는 예외
◦ Exception Class : 사용자의 실수와 같은 외적 요인에 의해 발생하는 예외
3. Exception Trace
- Exception Trace(예외 추적)
· 예외가 발생했을 때 생성되는 Exception Class의 Instance에는 발생한 예외에 대한 정보가 담겨있다.
· 해당 정보는 printStackTrace()와 getMessage()를 통해 얻을 수 있다.
· Method 정보
◦ printStackTrace() : 예외 발생 당시의 Call Stack에 있었던 Method 정보와 Exception Message를 화면에 출력
◦ getMessage() : 발생한 Exception Class의 Instance에 저장된 Message를 얻을 수 있다.
· Method 사용 방법
1 2 3 4 | catch ([Exception Class] [Exception Variable]) { [Exception Variable].printStackTrace(); System.out.println(“Exception Message : ” + [Exception Variable].getMessage()); } | cs |
- Method Exception
· Method에 따로 예외 선언이 가능하며 throws Keyword를 이용하면 Method에 예외 선언을 할 수 있다.
· Method에 Exception을 선언하면 보다 예외를 추적하는 것을 빠르고 정확하게 처리할 수 있다.
· 사용방법
1 2 3 4 5 6 | public static void main(String[] args) throws Exception { Method_1(); } static void Method() throws Exception { throw new Exception(); } | cs |
4. Exception Re-Throwing
- Method에서 발생할 수 있는 예외가 여러 개인 경우
· 예외를 인위적으로 발생시켜 처리한다.
· Exception Re-Throwing 이용
· 처리 순서
◦ 예외가 발생할 가능성이 있는 Method에서 try-catch 문을 사용해서 예외를 처리
◦ catch 문에서 필요한 작업을 이행
◦ throw 문을 사용해 다시 예외 발생
- Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Example_Except { public static void main(String[] args) { try { Method(); } catch (Exception e) { [Content] } } static void Method() throws Exception { try { throw new Eception(); } catch (Exception e) { [Content] throw e; } } } | cs |
5. User-Defined Exception
- 기존에 정의되어 있는 예외 Class 외에 필요에 따라 Programmer가 새로운 예외 Class를 만드는 것
- Exception Class를 상속 받는 것이 보통이지만 필요에 따라 다른 Class를 상속 받을 수 있다.
- Example
1 2 3 | class UDException extends Exception { [Content] } | cs |
'Java > Theory' 카테고리의 다른 글
Chapter 6. Collection Framework (0) | 2015.08.19 |
---|---|
Chapter 5. Inner Class (0) | 2015.08.19 |
Chapter 4. java.lang Package (0) | 2015.08.19 |
Chapter 2. 객체지향 프로그래밍 II (0) | 2015.08.19 |
Chapter 1. 객체 지향 프로그래밍 I (0) | 2015.08.19 |