checked 예외, unchecked 예외

기록하는 용도·2022년 8월 20일
0
post-thumbnail

예외 클래스의 계층구조는 최고 조상인 Exception 클래스를 제외하고 크게는 두가지로 분류할 수 있다.

  1. RuntimeException
  2. RuntimeException을 제외한 자손 클래스들(IOException 클래스 등 + Exception)

unchecked 예외

컴파일러가 예외 처리 여부를 체크하지 않는것으로, RuntimeException 클래스의 자식 Exception 클래스들을 말한다.
대표적으로 NullPointerException , IndexOutOfBoundsException, NumberFormatException 등이 있다.
메서드에서 throws 를 명시하지 않아도 Runtime 계열의 Exception은 자동으로 throws 된다. (호출한 측으로 전파된다)
Exception과 그 자손들(IOException, ClassNotFoundException ...)

checked 예외

컴파일러가 예외 처리 여부를 필수적으로 체크하는것으로, 컴파일 시점에 Exception 처리를 체크할 수 있는 Exception 계열 Exception 처리는 try ~ catch 또는 throws 로 선택지가 있다. Runtime 계열 Exception 을 제외한 모든 Exception은 Checked Exception 이다.
(+Exception도 함께 포함됨)

왼편이 unchecked예외, 오른편이 checked예외 라고 볼 수 있다.



예제1)

public class ex1 {
	public static void main(String[] args) {
		throw new Exception();
	}
}

이 코드는 Unhandled exception type Exception 컴파일 에러가 난다. 예외처리가 되지않았다는 뜻이다. Exception은 checked예외로, 예외처리를 반드시 해줘야하기때문이다.

public class ex1 {
	public static void main(String[] args) {
		try {
			throw new Exception();
		}
		catch (Exception e) {
		};
	}
}

예제1의 코드는 더 이상 아무 에러가 나지않는다.
try ~ catch문으로 예외 처리를 해줬기때문이다.

예제2)

public class ex1 {
	public static void main(String[] args) {
		throw new RuntimeException();
	}
}

이 예제는 컴파일 에러가 나지않는다.
RuntimeException은 unchecked Exception 이기때문에 컴파일러의 예외 처리가 필수적이지않기 때문이다.

하지만 실행결과는 런타임 에러가 난다.
이 예제도 try ~ catch 문으로 해결할 수 있다.

0개의 댓글