티스토리 뷰

java

[Java] 예외 처리

개발자 쿠키 2024. 8. 12. 15:11

예외 계층 그림

  • Object : 자바에서 기본형을 제외한 모든 객체다. 예외도 객체이다. 모든 객체의 최상위 부모는 Object 이므로 예외의 최상위 부모도 Object 이다.
  • Throwable : 최상위 예외, 하위에 Exception과 Error가 있다.
  • Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구가 불가능한 시스템 예외. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안됨.
  • Exception : 체크 예외
    • 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외
    • Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. 단 RuntimeException은 예외로 한다.
  • RuntimeException : 언체크 예외, 런타임 예외
    • 컴파일러가 체크 하지 않는 언체크 예외
    • RuntimeException과 그 자식 예외는 모두 언체크 예외이다.
    • RuntimeException의 이름을 따라서 RuntimeException과 그 하위 언체크 예외를 런타임 예외라고 부른다.

 

예외 기본 규칙

  • Main은 Service를 호출한다.
  • Service는 Client를 호출한다.
  • Client에서 예외가 발생한다.
  • Client에서 예외를 처리하지 못하고 밖으로 던진다. 여기서 Client의 밖은 Client를 호출한 Service를 뜻한다.
  • Serivce에 예외가 전달된다. Serivce에서 예외를 처리했다. 이후 애플리케이션 로직이 정삭 흐름으로 동작한다.
  • 정상 흐름을 반환한다.

 

예외 2가지 기본 규칙

  1. 예외는 잡아서 처리하거나 밖으로 던져야 한다.
  2. 예외를 잡거나 던질 때 지정한 예외뿐만 아니라 그 예외의 자식들도 함께 처리할 수 있다.
    • ex ) exception을 catch로 잡으면 그 하위 예외들도 모두 잡을 수 있다.
    • ex) exception을 throws로 던지면 그 하위 예외들도 모두 던질 수 있다.

Main 밖으로 예외를 던지면 로그를 출력하면서 시스템이 종료된다.

 

throws throw의 차이

  • throw 예외는 새로운 예외를 발생시킬 수 있다. 예외도 객체이기에 먼저 new로 생성하고 예외를 발생시켜야 한다.
  • throws 예외는 발생시킨 예외를 메서드 밖으로 던질 때 사용하는 키워드이다.

 

throws Exception의 문제

  • Exception은 최상위 타입이므로 모든 체크 예외를 다 밖으로 던지는 문제가 발생.예외 계층 그림