티스토리 뷰

예외 클래스의 구조

 

  • Throwable 클래스를 상속받는 클래스는 Error와 Exception 이 있는데 모든 예외의 최고 조상 클래스는 당연히 Exception 이다. 
  • java.lang.Throwable class가 Java Exception의 Root Class이다.
  • Throwable 클래스에 선언되어 있고, Exception 클래스에서 오버라이딩한 메소드는 10개가 넘으며, 가장 많이 사용되는 메서드는 다음과 같다.
    • getMessage()
      • 예외 메시지를 string 형태로 제공받는다.
      • 예외가 출력되었을때 어떤 예외가 발생되었는지 확인할 때 매우 유용하다. 
      • 메시지를 활용하여 별도의 예외 메세지를 사용자에게 보여주려고 할 때 좋다. 
    • toString()
      • 예외 메세지를 String 형태로 제공 받는다. 
      • getMessage() 메소드 보다는 약간 더 자세하게 예외 클래스 이름도 같이 제공한다. 
    • printStackTrace()
      • 가장 첫줄에는 예외 메세지를 출력하고, 두번째 줄부터는 예외가 발생하게 된 메소드들의 호출 관계(Stack Trace)를 출력해준다.
      • printStackTrace()는 서비스 운용시 사용하면 안된다.
        • 개발할때는 디버깅에 유용해서 좋다. 하지만 성능을 생각하면 지양해야하는데 왜냐하면 java reflection을 사용하여 trace를 추적하는 것이기 때문에 오버헤드가 발생하기 때문이다. 
  • Error은 시스템 레벨의 심각한 수준의 에러이기 때문에 시스템에 변화를 주어 처리해야 하는 경우가 일반적이다. 반면, Exception 은 개발자가 로직을 추가하여 처리할 수 있다. 
  • Exception은 수많은 자식클래스를 가지고 있는데, 그 중 RuntimeExceptionChecked ExceptionUnchecked Exception을 구분하는 기준이다. RuntimeException을 제외한 모든 클래스는Checked Exception 이며, RuntimeException과 그의 자식 클래스들을 Unchecked Exception이라 부른다. 

예외(Exception) 과 오류(Error)의 차이는?

  • 오류(Error)는 시스템에 비정상적인 상황이 생겼을 때 발생한다. 이는 시스템 레벨에서 발생하기 때문에 심각한 수준의 오류이다. 따라서 개발자가 미리 예측하여 처리할 수 없기 때문에, 애플리케이션에서 오류에 대한 처리를 신경쓰지 않아도 된다. 
  • 예외(Exception)은 개발자가 구현한 로직에서 발생한다. 즉, 예외는 발생할 상황을 미리 예측하여 처리할 수 있다. 따라서 예외는 개발자가 처리할 수 있기 때문에 예외를 구분하고 그에 따른 처리 방법을 명확히 알고 적용하는 것이 중요하다. 

Checked Exception과 Unchecked(Runtime) Exception

  Checked Exception Unchecked Exception
처리 여부 반드시 예외를 처리해야 한다.  명시적인 처리를 강제하지 않는다. 
확인 시점 컴파일 단계 실행 단계
예외 발생시
트랜잭션 처리
roll-back 하지 않는다.  roll-back 해야한다. 
대표 예외  Exception의 상속받는 하위 클래스 중 Runtime Exception을 제외한 모든 예외 
- IOException
- SQLException
RuntimeException 하위 예외 
- NullPointerException
- IllegalArgumentException
- IndexOutOfBoundException
- SystemException

 

Custom Exception(User defined exception)

  • 예외 클래스에는 자바에서 미리 정의한 표준 예외 클래스가 존재한다. ex) IndexOutOfBoundException
  • 개발자가 직접 예외 클래스를 정의하여 사용할 수 있는데 이를 Custom Exception 이라고 한다.
  • 자바에서는 Exception 클래스 또는 RuntimeException 클래스를 상속받아 개발자가 자신만의 새로운 예외 클래스를 정의하고 사용이 가능한데, 커스텀 예외 클래스는 생성자 뿐만아니라 필드, 메소드도 원하는 만큼 추가가 가능하다. 
class MyException extends RuntimeException {
  public MyException(String errorMessage) {
    super(errorMessage);
  }
}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함