티스토리 뷰
예외 클래스의 구조
- 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를 추적하는 것이기 때문에 오버헤드가 발생하기 때문이다.
- getMessage()
- Error은 시스템 레벨의 심각한 수준의 에러이기 때문에 시스템에 변화를 주어 처리해야 하는 경우가 일반적이다. 반면, Exception 은 개발자가 로직을 추가하여 처리할 수 있다.
- Exception은 수많은 자식클래스를 가지고 있는데, 그 중 RuntimeException 은 Checked Exception과 Unchecked 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);
}
}
'Study > Java' 카테고리의 다른 글
[스터디 11주차] Enum (0) | 2022.02.27 |
---|---|
[스터디 10주차] 멀티쓰레드(Multi-thread) 프로그래밍 (0) | 2022.02.20 |
[스터디 9주차] 자바의 예외(Exception)처리 (0) | 2022.02.13 |
[스터디 8주차] 인터페이스(Interface) (0) | 2022.01.30 |
[스터디 7주차] 접근 지정자 (0) | 2022.01.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프로그래머스
- 자료구조
- 스터디
- 운영체제
- CS.
- 보험
- https
- 이진탐색
- CS 스터디
- 코드업 기초
- 정렬
- SW
- 리스트 복사
- 자료구조와알고리즘 23강
- 리스트2
- 알고리즘
- 자바
- Greedy sort
- 파이썬
- It
- CS
- 프로그래머스강의
- 데이터베이스
- 연결리스트활용
- 이차 리스트
- 프로세스 주소공간
- 리스트
- 완전탐색
- 리스트함축
- 네트워크
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함