[JAVA] 에러, 예외 Throwable 자식들

정지원·2020년 12월 19일
1

JAVA

목록 보기
1/1
post-thumbnail

에러(Error)와 예외(Exception)

자바에서는 에러(Error)와 예외(Exception)는 Throwable 클래스를 상속한다.

에러(Error)는 프로그램의 비정상적인 작동을 초래한다. An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. 이러한 에러는 메모리 부족이나 스택오버플로우와 같이 치명적인 것이다. 즉, 에러는 개발자가 처리할 수 없다.

예외(Exception)은 개발자가 의도하지 않은 방식으로 조작하거나 개발자의 로직에 빈틈이 있어 코딩을 잘못하였을 때 발생한다. 예외는 개발자가 처리하여 프로그램 종료를 방지할 수 있으므로 예외처리(Exception handling)를 잘 해서 프로그램의 비정상적인 작동을 막자.

예외는 컴파일하는 과정에서 발생하는 예외(일반 예외)와 런타임(실행) 과정에서 발생하는 예외가 있다. 자바에서는 런타임 과정에서 발생하는 예외는 RuntimeException 클래스를 상속하고 있으며 이는 컴파일 시에 통과한다. RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine. 즉, JVM은 RuntimeException을 상속하였는지의 여부를 통해 예외를 던질지말지(?) 판단한다. 컴파일 과정에서의 예외는 InterruptedException, SqlException, IOException 등이 있고, 런타임 과정에서의 예외는 NullPointerException, ArrayIndexOutOfBoundsException, BufferOverflowException 등이 있다. 자세한 내용은 docs를 보자

Transition

점프 투 자바 07-4 예외처리 (Exception) 의 Transition을 보자 이해가 확 된다. (요약: 예외처리는 부분만 알아서는 안되고 전체를 관통하여 모두 알아야만 정확히 할 수 있다.)

예외처리 방법

  1. try catch
  2. throws로 상위 코드 블록으로 양도

예외 던지기 or return false?

https://www.reddit.com/r/java/comments/1dy45o/should_i_throw_an_exception_or_return_a_boolean/

내 경험 법칙은 내가 함수에 요청하는 일이 입력이 주어지지 않는 한 예외를 던지지 않는다는 것입니다.

예를 들어, 특정 "사람"객체가 남성인지 여성인지 결정하고 그 사람이 남성이면 true를 반환하고 그 사람이 여성이면 false를 반환하는 함수가 있다고 가정 해 보겠습니다. 함수를 묻는 간단한 예 또는 아니오 질문입니다. 그러나 "person"개체 대신 null 개체를 전달하면 질문에 답할 수 없습니다. 함수가 그 일을 할 수 없기 때문에 여기서 예외를 던질 것입니다. 예외는 제어 메커니즘이 아닙니다. "예외적 인"경우입니다.

okky: 예외 처리에 대한 6가지 화두

참고

0개의 댓글