Effective Java 10장 예외 - 1

Effective Java 3/E

해당 블로그는 Effective 3을 읽고 공부한 내용을 정리한 블로그입니다.

P386 예외는 진자 예외 상황에서만 사용하라

  • 예외는 오직 예외 상황에서만 써야 한다. 절대로 일상적인 제어 흐름용으로 쓰여선 안된다.

P390 복구할 수 있는 상황에서는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라

문제 상황을 알리는 타입(throwable)

  • 검사 예외 : 호출하는 쪽에서 복구를 해야하는 상황이면 검사 예외를 사용
  • 런타임 예외 : 프로그래밍 오류를 나타낼 때
    • ex : Array?IndexOutOfBoundsException이 발생 즉 전제조건을 만족하지 못할때 발생
  • 에러 : JVM자원 부족, 불변식 깨짐 등 더 이상 수행을 계속할수 상황에 삳용
    • 구현하는 비검사 throawable든 모두 RuntimeException의 하위 클래스

Java Exception Class Hierarchy

Java Exception Error

Exception - Error 간단 정리

Exception Error
개발자가 프로그래밍상 핸들링 가능하다면 Error like 메모리관련
처리 가능 불가능
Exception is due to programmatic logic and it is recoverable. Therefore it must be handled using either try-catch block or throws clause Error is due to lack of system resources and it is non-recoverable. Therefore it isn’t feasible to handled by programmer

checked - unchecked 간단 정리

checked exception unchecked exception
처리 여부 반드시 예외 처리해야함 명시적인 처리를 강제하지 않음
확인 시점 컴파일 단계(실행 전에 알수 있음, ide에서 컴파일시 이미 체크를 다해줌, 아 좋은 세상) 실행 단계(실행 해야 알수 있음)
예외 발생시 transaction 처리 롤백하지 않은 롤백 함
대표 예외 RuntimeException을 제외한 모든 예외
ex) SqlException,
runtime에 발생하는 예외
RuntimeExceoption 하위의 모든 예외
널포인터익셉션
IndexOutOfBoundExcepiton

P393 필요 없는 검사 예외 사용은 피하라

  • 꼭 필요한 곳에서 사용하면 프로그램의 안전성을 높여주지만, 남용하면 쓰레기(직역…) 가 된다. Api 호출시 예외 상황에서 복수할 방법이 없다면 비검사 예외를 던지자.