Error(오류)와 Exception(예외)은 개발자가 미리 예측할 수 있는가?
에 따라 정해집니다.

Throwable
Error와 Exception을 살펴보기 전에 둘 다 Throwable이라는 클래스와 상속관계에 있습니다.
Throwable에는 getMessage()와 printStackTrace()가 있습니다.
이 두 메서드를 통해 에러 코드들을 확인할 수 있습니다.
즉, Error와 Exception에는 에러 메세지를 담을 수 있습니다.
Error (오류)
시스템이 종료되어야 할수준의 상황 같은 심각한 문제
실행전 컴파일 에러 또는 실행중 에러가 발생하는 경우입니다.
이것은 개발자가 예측하여 방지할 수 없습니다.
StackOverflowError
호출의 깊이가 깊어지거나 재귀가 지속되어 stack overflow 발생 시 던져지는 오류입니다.
OutOfMemoryError
JVM이 할당된 메모리의 부족으로 더 이상 객체를 할당할 수 없을 때 던져지는 오류입니다.
Garbage Collector에 의해 추가적인 메모리가 확보되지 못하는 상황이기도 합니다.
Exception( 예외 )
개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생
개발자와 사용자에 대한 실수 이므로 개발자가 미리 예측하여 방지할 수 있습니다.
Error는 예측할 수 없고 Exception은 예측할 수 있기에 당연히
개발자는Exception상황에서 적절한 코드로 비정상적 종료를 방지해야 합니다.
예를들자면 로그인시 비밀번호를 잘못입력하였다면
Exception을 Throw를 사용해 그에 맞는 Exception 처리를 하는것 입니다.
InputMismatchException
입력 형식이 예상과 다른경우
ArithemticException
0으로 나눌 수 없는 경우
Throws, Throw
예외를 칼이라고 생각하고 예시를 들어보겠습니다.
Throws
throws는 ~한 에러가 있다는것을 호출한 곳에 전달해 줍니다.
칼을 사용하면 다칠수도 있어!
라고 알려주는 용도입니다.
칼을 사용하는 곳에서 직접 에러를 다뤄야 합니다.
Throw
실제 예외를 다루는 용도입니다.
칼을 사용하다 ~~를 다쳤어!
라고 알려주는 용도입니다.
RuntimeException(실행중 Unchecked Exception), Complie Exception(실행전Checked Exception)
RuntimeException은 실행중에 예외를 캐치하여 던질 수 있습니다.
(명시적으로 예외처리를 강제하지 않음)
반면, Complie Exception은 컴파일 시점에 예외를 잡아주어야 합니다.
(예외가 발생하는 메서드에서 throws 예약어를 활용하여 예외를 호출한 메서드에 전달하는 방법으로 처리가 가능합니다.)
느낀점
예외처리는 항상 RuntimeException을 사용했는데
ComplieException을 사용하는 상황에 대해 좀 더 공부해보고 적용해 볼 수 있다고 생각했습니다.
참고
IT핥기 - [JAVA] 예외 처리(Exception)관련 구문 이해하기
'Java' 카테고리의 다른 글
InnerClass의 메모리 누수 위험 (0) | 2023.12.20 |
---|---|
Lambda, Stream (0) | 2023.10.11 |
ThreadPool (1) | 2023.10.08 |
자바 컬렉션 (0) | 2023.09.27 |
제네릭 사용 이유 (0) | 2023.09.26 |
Error(오류)와 Exception(예외)은 개발자가 미리 예측할 수 있는가?
에 따라 정해집니다.

Throwable
Error와 Exception을 살펴보기 전에 둘 다 Throwable이라는 클래스와 상속관계에 있습니다.
Throwable에는 getMessage()와 printStackTrace()가 있습니다.
이 두 메서드를 통해 에러 코드들을 확인할 수 있습니다.
즉, Error와 Exception에는 에러 메세지를 담을 수 있습니다.
Error (오류)
시스템이 종료되어야 할수준의 상황 같은 심각한 문제
실행전 컴파일 에러 또는 실행중 에러가 발생하는 경우입니다.
이것은 개발자가 예측하여 방지할 수 없습니다.
StackOverflowError
호출의 깊이가 깊어지거나 재귀가 지속되어 stack overflow 발생 시 던져지는 오류입니다.
OutOfMemoryError
JVM이 할당된 메모리의 부족으로 더 이상 객체를 할당할 수 없을 때 던져지는 오류입니다.
Garbage Collector에 의해 추가적인 메모리가 확보되지 못하는 상황이기도 합니다.
Exception( 예외 )
개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생
개발자와 사용자에 대한 실수 이므로 개발자가 미리 예측하여 방지할 수 있습니다.
Error는 예측할 수 없고 Exception은 예측할 수 있기에 당연히
개발자는Exception상황에서 적절한 코드로 비정상적 종료를 방지해야 합니다.
예를들자면 로그인시 비밀번호를 잘못입력하였다면
Exception을 Throw를 사용해 그에 맞는 Exception 처리를 하는것 입니다.
InputMismatchException
입력 형식이 예상과 다른경우
ArithemticException
0으로 나눌 수 없는 경우
Throws, Throw
예외를 칼이라고 생각하고 예시를 들어보겠습니다.
Throws
throws는 ~한 에러가 있다는것을 호출한 곳에 전달해 줍니다.
칼을 사용하면 다칠수도 있어!
라고 알려주는 용도입니다.
칼을 사용하는 곳에서 직접 에러를 다뤄야 합니다.
Throw
실제 예외를 다루는 용도입니다.
칼을 사용하다 ~~를 다쳤어!
라고 알려주는 용도입니다.
RuntimeException(실행중 Unchecked Exception), Complie Exception(실행전Checked Exception)
RuntimeException은 실행중에 예외를 캐치하여 던질 수 있습니다.
(명시적으로 예외처리를 강제하지 않음)
반면, Complie Exception은 컴파일 시점에 예외를 잡아주어야 합니다.
(예외가 발생하는 메서드에서 throws 예약어를 활용하여 예외를 호출한 메서드에 전달하는 방법으로 처리가 가능합니다.)
느낀점
예외처리는 항상 RuntimeException을 사용했는데
ComplieException을 사용하는 상황에 대해 좀 더 공부해보고 적용해 볼 수 있다고 생각했습니다.
참고
IT핥기 - [JAVA] 예외 처리(Exception)관련 구문 이해하기
'Java' 카테고리의 다른 글
InnerClass의 메모리 누수 위험 (0) | 2023.12.20 |
---|---|
Lambda, Stream (0) | 2023.10.11 |
ThreadPool (1) | 2023.10.08 |
자바 컬렉션 (0) | 2023.09.27 |
제네릭 사용 이유 (0) | 2023.09.26 |