Error vs Exception

박나현·2024년 4월 25일

[기록] 1일 1성장

목록 보기
3/5

에러와 예외의 개념

에러

에러Error란 시스템 레벨에서 문제가 발생해 대처가 불가능한 오류를 의미한다. 에러는 아래의 3가지 종류로 나눌 수 있다.

  1. 컴파일 에러

    컴파일 시에 발생하는 에러이다. 문법을 잘못 작성했을 때 컴파일 에러가 발생한다. 주로 IDE에서 빨간 줄이 그어지는 것으로 컴파일 에러를 확인할 수 있다.

    즉 해당 코드로는 프로그램을 컴파일할 수 없는 상태이며, 컴파일을 하기 위해서는 코드를 수정해야 한다는 의미이다. 괄호, 쌍반점(;) 등이 빠지거나 변수형 문제, 초기화되지 않은 변수의 사용 등이 있다.

    자바에서의 컴파일 에러는 파일을 컴파일하는 과정에서 JVM이 던지게 된다.

  2. 런타임 에러

    프로그램 실행 시에 발생하는 에러이다. 컴파일은 가능하지만 해당 코드를 수행할 수 없어 발생한다. 0으로 나누거나, 무한 루프에 빠지는 등의 이유로 발생한다.

    intelliJ에서 코드 자체에 빨간 줄이 그어지지는 않지만, main 메서드를 실행하면 ‘/ by zero’라는 에러 메시지를 확인할 수 있다.

  3. 논리적 에러

    위의 두 에러처럼 에러 메시지가 나타나지는 않지만, 의도했던 대로 코드가 작동하지 않는 경우를 의미한다. 알고리즘 문제를 풀 때 코드상 오류는 없지만 오답이 나오는 경우도 논리적 에러에 해당한다.

예외

예외Exception란 잘못된 사용/코딩으로 인한 에러를 말한다. 자바에서 모든 예외는 런타임 시간에 발생한다.

자바에서 예외는 다음 두 가지가 있다.

  1. 체크 예외

    컴파일 시간에 감지되고 런타임 시간에 발생하는 예외를 말한다. 즉 해당 예외가 존재한다면 프로그램이 실행되는 것 자체가 불가능하며, 예외 처리 코드를 항상 같이 작성해야 한다. RuntimeException 클래스를 상속받지 않는다. IOException, SQLException 등이 있다.

    체크 예외는 컴파일 시간에 감지할 수 있다(발생은 런타임 시간에 한다).

  2. 언체크 예외

    프로그램 실행 시에 발생하는 예외를 말한다. RuntimeException을 상속받으며 컴파일 시에는 무시된다. 자주 사용되는 IllegalArgumentException, NullPointerException 등이 해당한다.

기본적으로 스프링에서의 @Transactional 안에서 발생하는 예외 중 체크 예외는 롤백이 되지 않고, 언체크 예외만 롤백된다. 설정을 통해 옵션을 변경할 수 있다.

에러와 예외의 차이

아무런 처리를 하지 않았을 때 둘 다 프로그램이 종료되지만, 예외는 예외 처리를 통해 프로그램 실행 상태를 유지할 수 있다는 점이 다르다.

또한 발생한 에러에 대해 애플리케이션 코드에서 대처할 방법이 없다.이 때 대처한다는 것은 해당 에러가 발생했을 때 그것에 대처할 수 있는 처리법을 구현해 두고 프로그램이 계속 동작하도록 한다는 의미이다. 개발자가 코드 자체를 수정해 오류를 해결(fix)한다는 의미가 아니다.

처음에 에러에 대처하지 못한다는 게 무슨 의미인지 헷갈렸는데, 개발자가 코드 문법을 수정하는 것과 try-catch로 예외를 잡는 것은 다르다. 예를 들어 구문 오류로 컴파일 에러가 발생했을 때 그 코드를 정상적으로 수정하는 것은 에러를 처리해주는 게 아닌 것이다.

위 내용을 정리하자면 다음과 같다.

에러예외
의미런타임 시간에 처리할 수 없는 에러런타임 시간에 처리 가능한 예외
발생시스템 이상에 의해 발생애플리케이션 코드로 인해 발생
회복회복 불가능주로 try-catch문으로 회복 가능
구조(자바)Error 클래스 상속Exception 클래스 상속
예시OutOfMemoryError, StackOverflowErrorIOException, NullPointerException

Reference

https://www.geeksforgeeks.org/difference-between-compile-time-errors-and-runtime-errors/

https://www.scaler.com/topics/java/error-vs-exception-in-java/

https://mangkyu.tistory.com/152

⌜이것이 자바다 개정판⌟ - 신용권, 임경균

profile
의견을 가지고 학습하기, 질문하기, 궁금했던 주제에 대해 학습하는 것을 미루지 않기

0개의 댓글