김영한님 스프링 DB 접근 1편 - 예외처리부분을 보고 정리한 내용입니다.
Exception, 예외란?
예외는 크게 두 종류로 나뉘게 된다. Checked Exception와 Unchecked Exception 그리고 예외에 해당되지 않은 Error가 있다. 예외란 개발자가 로직을 잘못 짰거나 혹은 사용자가 잘못된 값을 넘겨 정상적인 프로그램 흐름에서 벗어나는 행위를 말한다.
보통의 개발자는 예외가 나올 수 있는 상황을 미리 예측하여 예외처리를 한다..
오류는 하드웨어에서 문제가 발생하는 경우도 있고, 완전 잘못된 로직을 짠 경우 등 시스템 레벨에서 발생하는 비정상적인 행위이기에 미리 예측해서 막을 필요가 없다.
예외도 하나의 객체이며, 모든 최상위 부모는 'object'이기에 예외의 최상위 부모도 Object다. 상위 예외를 'catch'로 잡게 될 경우에는 그 하위 예외까지 함께 잡기 때문에, 어플리케이션에서는 'Throwable'의 예외도 잡아버리면 Error의 예외도 잡아버리기에 Exception의 예외부터 잡게 된다.
Excption을 체크 예외라고 한다. Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크예외이지만, 그 중에서 RuntimeException은 예외로 한다. 따라서 RuntimeException과 그 자식들은 전부 UnChecked Exception이라고 생각하면 된다. 이를 '런타임 예외"라고 많이 부른다.
예외 처리와 예외 던짐
예외는 던질 수도 있고 처리를 할 수도 있다. 예를 들어 위의 이미지와 같이 Repository에서 예외가 발생하였지만 이 예외를 Repository에서 처리하지 않고 Service 계층으로 넘기고 Service에서 처리를 해준다. 이와 같이 예외를 처리하는 것을 예외처리, 예외를 다른 계층에 넘기는 것을 예외 던짐이라고 한다.
Exception을 catch로 잡게된다면 예외를 처리를 하게 되는 데, Exception의 하위 계층들도 모두 잡을 수 있고, Exception을 'throws'로 던지면 마찬가지로 하위 계층들도 전부 던지게된다.
'Language > JAVA' 카테고리의 다른 글
클래스와 객체, 인스턴스 (0) | 2022.12.24 |
---|---|
객체지향언어와 역사 (0) | 2022.12.24 |
[JAVA] 연산자(1) 연산자의 종류와 우선 순위, 결합 규칙 (0) | 2022.08.22 |
[Java] 자바의 자료형 (0) | 2022.08.14 |
[JAVA] 식별자 (0) | 2022.04.19 |