본문 바로가기

.주제별/Java

Java) Exception 요약

참고 : http://benelog.egloos.com/1901121
http://crosscutter.info/56
http://crosscutter.info/63

1. Exception 사용 예제

    1) 예외를 던지는 위험한 코드
    코드에서 예외를 던진다면, 반드시 메소드를 선언하는 부분에서
    throws 키워드를 써서 선언해줘야한다.

	public void takeRisk() throws BadException {
          if(abandonAllHope) {

              throw new BadException();

          }

      }

    exception를 선언하는 과정을 통해, BadException을
    던질 수 있다는 것을 외부에 알린다.

    2) 위험한 메소드를 호출하는 코드
    예외를 던지는 메소드를 호출하면, 예외발생 가능성이 있음을 알고
    있다는 것을 표현해야 한다. 즉 try/catch 사용

    public void crossFingers(){
          try{

              anObject.takeRisk();

          } catch (BadException ex) {

              System.out.println("A~~~ gh~!");

              ex.PrintStackTrace();

          }

      }

 

2. Exception은 반드시 처리(try/catch)하거나,선언(회피, throws 사용) 해야 한다.

   1) 처리 하기

          try{

              laundry.doLaundry();

          } catch (ClothingException cex){

              //exception처리

          }

   2) 선언(회피하기)

          void foo() throws ClothingException {

              laundry.doLaundry()

          } 

   % 메소드에서 예외를 던지면, 그 메소드는 스택에서 곧바로 제거된다.
   exception은 스택 바로 밑에 있는 메소드(즉, 이를 호출한 메소드)로
   던져진다.  

3. 참고사항


    * 컴파일러에서는 RuntimeException을 제외한 모든 것을 확인함

    * Checked Exception
      RuntimeException 의 하위클래스에 속하지 않는 Exception 객체는
      컴파일러에서 확인해야 하는데, 이런 에외를 "Checked Exception" 이라 함.
      예를들어, IOException/ InterruptedException등
      Exception - IOException
                       - InterruptedException
                       - RuntimeException      - ClassCastException
                                                             - NullPointerException

    * Unchecked Exception
      RuntimeException 객체는 컴파일러에서 확인하지 않는데,
      이런 예외를 "Unchecked Exception"이라 한다.


    * RuntimeExcpetion 유형에 속하는 Exception에 대해서는,
      컴파일러에서 신경을 쓰지 않는다. RuntimeException은 선언하지
      않아도 되고, try/catch로 포장할 필요도 없다.

    * 메소드에서 두개의 Exception을 던질 수도 있다. 
     

public void doLaundray() throws PantsException, LingerieException {

        ..

        }


    * 여러 exception이 있는 경우, JVM에서는 순서대로 확인하기 때문에,
      맨 위부터 하위 Exception부터 사용해야함

 

4. 주의점
    * try/ catch 불록에 return이 있어도, finally 블록은 실행됨


    * exception 발생시, catch 실행후 이후 모두 실행함(return아님)