[JAVA] error,exception 과 예외 클래스의 계층구조

Jongmyung Choi·2022년 5월 9일
4
post-thumbnail

프로그램을 실행할 때 언제나 예기치 못한 사건으로 인해 문제가 생길 수 있다.
우리는 흔히 이를 프로그램에 오류가 발생했다 라고 하는데 자바에서는 이런 오류를
오류(Error)
예외(Exception)로 나눈다.


오류(Error) 란?

어떠한 문제로 인하여 프로그램이 오작동 하거나 예기치 않게 종료 되는 경우.
에러의 종류로는 크게 세가지로 컴파일 에러, 런타임 에러, 논리적 에러 가 있다.

컴파일에러(Compile Error)

  • 컴파일(실행전) 시 발생하는 에러
  • 대체로 문법적인 오류(Syntax Error)로 컴파일러가 해석할 수 없어서 발생한다.
  • 에러의 위치를 컴파일러가 알려준다.
  • e.g. ClassNotFoundException IllegalAccessException

런타임에러(Runtime Error)

  • 런타임(실행) 시 발생하는 에러
  • 설계미숙(문법오류 X)이나 기계적 결함으로 인하여 발생한다.
  • e.g. NullPointException ArithmeticException

논리적에러(Runtime Error)

  • 컴파일, 실행은 되지만 의도한 작업을 수행하지 않는 에러
  • 로직이 잘못됐으므로 에러 발생위치를 찾기 어렵다.

JAVA에서의 에러(Error)와 예외(Exception)

자바에서는 Runtime Error를 에러와 예외 두가지로 분류한다.

  • 에러(Error): 프로그램 코드로 수습 불가능한 치명적인 오류
  • 예외(Exception): 프로그램 코드로 수습 가능한 다소 작은 오류

자바에서의 Error는 Runtime Error에서의 System Error 에 해당한다.
(e.g. LinkageError, ThreadDeath,OutOfMemoryError )
따라서 Error 는 프로그래머의 의지와 관계없고 예측하여 처리할 수 있는 방법이 없다.
반면 Exception은 주로 개발자나 사용자의 실수에 의해 발생하는 예외 이고 로직을 통해 처리 할 수 있는 영역이므로 이 부분에 주목 해야 한다.

예외클래스의 계층 구조

이미지 출처 : https://hyoje420.tistory.com/12

위 사진은 예외 클래스의 계층 구조로 상위에 Object 클래스,Trowable 그리고 Trowable 을 상속받은 Exception 과 Error 가 있다.
Exception은 또 두가지로 나뉘어 지는데 Checked ExceptionUnchecked Exception 으로 나눠 진다.

UnChecked Exception

0으로 나눈다던가 Null 값에 참조 하는것 같이 컴파일 시 예측하기 힘들고 실행 중 특정한 조건에서 발생하기 때문에 컴파일 시에는 문제 없다.
이러한 것들을 다 예외처리 하는것은 복잡하고 의미없는 행동이고 코드를 짤때 예외가 생기지 않게 짜야 된다.(프로그래머가 발생할 것 같은 예외를 unchecked 해서 생기는 실수)
->이러한 예외가 발생한다는건 프로그래머가 코딩을 잘 못했다는 것이다.

Checked Exception

입력한 데이터의 형식이 잘못 되었다던가 파일의 경로가 잘못 된 것 같이 프로그래머가 아닌 외부에 의해 발생하는 예외이다.
따라서 코드상의 문제는 아니고 프로그램을 실행하다가 발생할 가능성이 있는 예외 이다.
예외를 처리해야 하고 처리하지 않았을 시에 컴파일 에러가 발생한다.
->주로 사용자 의 실수로 발생하는 예외

Checked ExceptionUnchecked Exception
클래스RuntimeException을 제외한 클래스RuntimeException 클래스
확인시점컴파일 단계실행단계
처리여부예외 처리 해야함명시적으로 하지 않아도 됨
트랜잭션 처리예외 발생시 롤백하지 않음예외 발생시 롤백 함
종류IOException, ClassNotFoundException 등NullPointerException, ArithmeticException 등

참고

https://hyoje420.tistory.com/12
https://close852.tistory.com/47
https://itmining.tistory.com/9

profile
총명한 개발자

0개의 댓글