본문 바로가기
코딩/JAVA

<JAVA> Exception (예외처리) - 에러(error)와 예외(Exception)

by 메모노어 2022. 7. 25.

코드를 실행시키면 콘솔창에 빨간줄을 띄우며 프로그램이 종료가 될 때가 있다. 물론 어떤 오류가 발생했는지 콘솔창에 띄워주는 자바의 상냥함을 볼 수 있다.

 

일상생활에서 보통 '에러 났다', '오류 났다' 라는 말을 동일하게 사용하는데, 자바에서는 오류의 종류로서 에러(Error)와 예외(Exception)로 구분된다. 고로 자바를 공부하는 우리들은 에러(Error)와 예외(Exception)를 구분할 줄 알아야한다.

 

 

1. 오류들의 공통 조상 Throwable

출처 : https://www.nextree.co.kr/p3239/

에러와 예외는 크게 보자면 Object 클래스 밑의 Throwable 클래스의 하위 클래스들이다. Object 는 모든 클래스들의 조상이다. 그렇다면 밑의 Throwable 클래스는 무엇일까?

 

 공식문서에서는 Throwable 클래스를 '오류나 예외에 대한 메세지를 담는다'고 설명하고 있다. 자바는 오류가 발생하면 각 오류에 해당하는 클래스들에 메세지를 담아서 콘솔창에 출력한다. 이 메세지를 담아서 출력하는 메소드를 Throwable 클래스가 갖고 있고, 이 클래스를 상속받은 에러와 예외 클래스 역시 사용이 가능하다.

 

 그러므로 Throwable 클래스를 상속받은 에러(Error)와 예외(Exception) 역시 오류나 예외 메세지를 담는 역할을 한다는 것을 알 수 있다. Throwable 클래스는 오류의 조상으로 존재하지만 직접 사용하는 경우는 드물다고 하니 개념 설명은 여기까지.

 

 

2. 에러 (Error)

Error 의 상속관계

에러(Error)란, 컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램 실행 오류가 발생하는 것을 말한다. 에러는 JVM 실행에 문제가 생겼다는 것이므로 JVM 위에서 실행되는 프로그램을 아무리 견고하게 만들어도 결국 실행 불능이 된다. 개발자는 이런 에러에 대처할 방법이 없다.

 

 개발자가 미리 예측하여 처리할 수 없는 오류이기 때문에 애플리케이션에서 오류에 대한 처리를 신경쓰지 않아도 된다.

 

 

 

3. 예외 (Exception)

Exception의 상속관계

 예외(Exception)란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말한다. 예외가 발생되면 프로그램은 곧바로 종료된다는 점에서는 에러와 동일하다. 그러나 예외는 예외처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.

 

 자바에서는 예외를 클래스로 관리한다. JVM은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체를 생성한다. 그리고 나서 예외 처리 코드에서 예외 객체를 이용할 수 있도록 해준다. 이 특성을 이용하여 개발자는 예외처리를 할 수 있다.

 

 즉, 에러는 개발자가 미리 예측하여 대응할 수 없지만, 예외는 개발자가 미리 예측하여 처리하는 것이 가능하다.

 

 

 

4. 예외(Exception)의 종류

Exception의 종류

Exception 클래스가 존재한다면 그 밑의 하위 클래스도 존재한다는 의미. 크게 두 가지 클래스로 나뉘는데 컴파일 단계에서 발생하는 예외를 처리하는 일반예외(Exception), 실행단계에서 발생하는 예외를 처리하는 실행예외(Runtime Exception)가 있다.

 

 일반예외(Exception) 클래스를 상속받은 클래스들을 Checked Exception 이라고 부르며, 실행예외(Runtime Exception)를 상속받은 클래스들을 Unchecked Exception이라고 부른다.

두 예외의 차이(좋은 표를 남겨주신 분께 감사!)

두 예외들에 대해 잘 정리된 표를 가져와 봤다. 어려워 보이지만 하나씩 읽어나가 보자.

 

  • 확인된 예외(Checked Exception)

컴파일 단계에서 예외가 발생한 경우다. 문법오류가 있거나 오타가 나거나 해서 실행 단계에 들어가지 못하고 프로그램이 멈춘다. 그래서 반드시 해결을 해야 프로그램을 실행할 수 있고 그렇기때문에 Checked Exception이라는 명칭을 쓴다. 이 예외가 발생하면 실행조차 되지 않았기 때문에 트랜잭션 역시 전혀 수행되지 않는다. 때문에 롤백할 필요가 없다.

  • 확인되지 않은 예외(Unchecked Exception)

런타임 단계에서 예외가 발생한 경우다. 프로그램이 실행도중 일어나는 예외들이다. 반드시 예외를 처리하지 않아도 프로그램은 실행되기 때문에 처리가 강제되지 않는다.(물론 예외처리를 하지 않으면 실행도중 예외가 발생했을 때 프로그램은 멈춘다.) 프로그램 실행단계에서 발생하는 예외이기 때문에 트랜잭션 수행도중 예외가 발생할 수 있다. 그래서 전체 트랜잭션이 수행되지 않았을 때를 위한 롤백처리가 필요하다.

 

 

 

참조자료

이것이 자바다 - 신용권 (한빛미디어, 2021)

https://www.nextree.co.kr/p3239/

 

Java 예외(Exception) 처리에 대한 작은 생각

일상생활에서도 기본적인 것은 고민하지 않고 습관처럼 사용하는 경우가 있다. 초급 개발자인 나에게 ‘예외(Exception)’이 바로 그런 것이었다. 처음 JAVA수업 때 강사님께 "왜 로직을 try문으로

www.nextree.co.kr

https://toneyparky.tistory.com/40

 

Java의 Error와 Exception 그리고 예외처리 전략

우아한테크코스(이하 우테코) 레벨 1 복습을 위한 글입니다. 자바는 오류가 발생하거나 발생할 여지가 있는 여러 상황에 대한 예외를 만들어두었습니다. 우리에게 익숙한 IllegalArgumentException을

toneyparky.tistory.com

https://java119.tistory.com/44

 

[Java] Error(에러)와 Exception(예외) 그리고 자주 보이는 Exception

이 글을 본 사람은 다 이해하진 못해도 자기가 코딩을 하다 예외가 떨어지면 아 오류 났네, 에러 났네 하지 말고 아 예외 떨어졌네. 익셉션 떨어졌네.라고 해줍시다. 그리고 제에발! 제발!!!!!!!!!

java119.tistory.com

https://edu.goorm.io/learn/lecture/41/%EB%B0%94%EB%A1%9C%EC%8B%A4%EC%8A%B5-%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9-%EC%9E%90%EB%B0%94-java/lesson/39411/%EC%98%88%EC%99%B8%EC%9D%98-%EC%84%A0%EC%A1%B0-throwable

 

구름EDU - 모두를 위한 맞춤형 IT교육

구름EDU는 모두를 위한 맞춤형 IT교육 플랫폼입니다. 개인/학교/기업 및 기관 별 최적화된 IT교육 솔루션을 경험해보세요. 기초부터 실무 프로그래밍 교육, 전국 초중고/대학교 온라인 강의, 기업/

edu.goorm.io