2013년 8월 7일 수요일

[2주차 4일] 예외처리(Exception)

: 시스템이 예외상황 발생시 적절한 처리 후 시스템이 멈추지 않게 하지 위함.


무조건 보고하는 방법(throws)

: 오류 방생 시 자신이 처리하지 않고 호줄자에게 떠 넘긴다.
호출자에게 오류를 넘기기 위해서는 메서드 선언부에 어떤 오류를 넘길지 선언해야 한다.

- 문법
 void method throws 떠넘길오류클래스명, 떠넘길오류클래스명, ....{

 }

ex>
public static void work() {
throw new Error("오호라... 오류!!");
}

public static void case1() throws Error {
System.out.println("작업 준비....");
work();
System.out.println("다른 작업....");
}
위의 결과는 "작업준비...."까지 찍히고 throws로 던졌기때문에 그 아래의 작업은 수행하지 않는다.



자체처리(try...catch)

: try...catch 문법을 사용하여 오류를 적절히 처리하여 시스템이 멈추지 않게 한다.
이것이 예외처리 문법의 존재이유이다.

- 문법
 try {
....
} catch ( 파라미터 선언 ) {
....
} catch ( 파라미터 선언 ) {
....
}

ex>
public static void work() {
throw new Error("오호라... 오류!!");
}

public static void case2() {
System.out.println("작업 준비....");
try {
work();
} catch (Error e) {
System.out.println("오류 났네요..... 그래도 계속 고!!!");
}
System.out.println("다른 작업....");
}
위의 예제의 결과를 보면 "작업 준비...."출력 후 예외상황이 발생해서 catch 블럭 안의 "오류 났네요..... 그래도 계속 고!!!"라는 문구를 출력하고 그아래에 있는 "다른 작업...."문구까지 출력되는 것을 확인할 수 있다.
이 말은 곧 예외상황이 발생시에 예외를 처리하고 다른작업을 계속 수행 할 수 있다는 말이다!!


보고하고 자체처리(try...catch...finally)

: 예외발생시 보고를 하고, '방법 2'와 같이 적절한 처리를 한다.
예외 발생 상황을 호출자에게 전달할 필요가 있을 때 사용한다.

- 문법
 try {
....
catch ( 파라미터 선언 ) {
throw 보고;
} catch ( 파라미터 선언 ) {
throw 보고;
} finally {
예외 처리
}
* finally 블럭은 try...catch 블럭를 탈출 하기 전에 반듯이 수행 된다.

ex>
public static void work() {
throw new Error("오호라... 오류!!");
}

public static void case3() throws Error {
System.out.println("작업 준비....");
try {
work();
} catch (Error e) {
System.out.println("던질거야!!");
throw e;
} finally {
System.out.println("예외에 대해 일단 마무리 조치를 했습니다.");
}
System.out.println("다른 작업....");
}
위의 예제에서 "작업 준비...."를 출력하고 catch블럭의 "던질거야!!"를 출력 후 finally블럭의 "예외에 대해 일단 마무리 조치를 했습니다."까지 출력 하는 것을 확인 할수 있을 것이다.
이 말은 일단 throw로 호출한 곳에 던진 후에 필요한 처리를 하게 된다는 것이다.
* DB연결등에 사용될 수 있다. 




Throwable클래스

throw 명령어로 던질 수 있는 인스턴스는 오로지 Throwable 만 가능!
예외 상황을 보고할 때 사용하는 클래스
보통 예외 상황이 발생했을 때의 정보를 담고 있다.
throw 명령어로 해당 객체를 호출자에게 전달한다.
두 타입의 자식 클래스가 있다.

1) Exception 자식 클래스
      - 애플리케이션에서 작업 도중에 발생하는 오류를 표현
      - 이런 예외를 보고 받는 호출자는 반드시 오류 처리를 해야 한다.
         만약 오류 처리를 하지 않으면, 컴파일 시 오류가 발생한다.
      - RuntimeException
            : Error와 마찬가지로 호출자에게 던졌을 때
              오류를 잘 받는지 컴파일러가 검사하지 않는다.

2) Error 자식 클래스
      - JVM 시스템에서 발생하는 오류를 표현
      - 이런 예외를 보고 받는 호출자는 오류를 처리하지 않아도 컴파일 오류가 발생하지 않는다.












댓글 없음:

댓글 쓰기