본문 바로가기

Java/Theory

Chapter 3. Exception Handling


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