- 자바에서는 '예외'라는 것이 존재합니다. 예외는 말 그대로 프로그램 코드가 실행되는 과정에 '예외'적인 상황이 발생했을 때 던져집니다. Exception은 크게 CheckedException과 UncheckedException(=RuntimeException)으로 나눠집니다. 이번 글에서는 두 가지 Exception의 차이점에 대해서 알아보겠습니다.
1) Checked Exception
- Checked Exception은 컴파일 타임에 체크(check)되는 예외입니다. 만약에 메소드 안의 특정 코드가 Checked Exception을 발생시키면, 메소드가 예외를 직접 다루거나 혹은 throws 키워드를 통해 예외를 명시해야 합니다.
Checked Exception에는 크게 2가지 종류가 있습니다. 첫째는, Fully Checked Exception입니다. Fully Checked Exception은 예외가 발생하면 모든 자식 클래스들의 예외도 같이 체크합니다. 대표적으로는 IOException, InterruptedException이 이에 속합니다. 둘째는, Partially Checked Exception입니다. Partially Checked Exception은 예외가 발생했을 때 일부 자식 클래스의 예외만 체크합니다.
※ throws란?
- throws란 메소드 내에서 명시적으로 예외를 throw하기 위해서 사용되는 자바 키워드입니다.
ex)
public void throwsException(int number) throws Exception{
if(number > 12){
throw new Exception("Number is over than 12");
}
System.out.println("Number is " + number);
}
- Checked Exception를 예시 코드를 통해 좀 더 자세히 알아보겠습니다.
다음과 같이 FileReader 클래스를 통해 "C:\\test\\a.text" 파일을 읽어오는 코드가 있다고 가정해봅니다.
이 때, 아래 코드는 컴파일 되지 않는데, 그 이유는 FileReader 클래스는 Checked Exception의 일종인
FileNotFoundException을 발생시킬 수 있기 때문입니다.
import java.io.*;
class GFG {
public static void main(String[] args)
{
FileReader file = new FileReader("C:\\test\\a.txt");
BufferedReader fileInput = new BufferedReader(file);
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
}
}
- 따라서 main 문에 IOException을 추가해서 예외 처리를 해야 합니다. FileNotFoundException은 IOException의 하위 클래스이기 때문에 IOExcpetion을 추가하는 것으로 컴파일 에러를 막을 수 있습니다.
import java.io.*;
class GFG {
public static void main(String[] args)
throws IOException
{
FileReader file = new FileReader("C:\\test\\a.txt");
BufferedReader fileInput = new BufferedReader(file);
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
}
}
2) Unchecked Exception(=Runtime Exception)
- 반면, 컴파일 타임에 체크되지 않는 Exception들도 존재하는데, 그것들을 Unchecked Exception이라고 합니다.
대표적인 Unchecked Exception으로는 NullPointerException, IndexOutOfBoundsException, ArithmeticException 등이 있습니다.
- Unchecked Exception을 예시 코드를 통해 좀 더 자세히 알아보겠습니다.
다음 코드는 자바의 나눗셈 연산과 관련된 코드입니다.
아래 코드는 컴파일 타임에는 정상적으로 동작하지만, 런타임에 오류가 발생합니다.
그 이유는 ArithmeticException이 Uncheked Exception에 속하기 때문입니다.
class GFG {
public static void main(String args[])
{
int x = 0;
int y = 10;
int z = y / x;
}
}
참고
자바의 신
'Java' 카테고리의 다른 글
HashMap vs HashTable vs ConcurrentHashMap (0) | 2022.08.06 |
---|---|
자바 스레드(1) (0) | 2022.08.06 |
자바 float과 double 자료형 (0) | 2022.07.31 |
자바 int와 long 자료형 (0) | 2022.07.31 |
Java 8 람다 표현식 (0) | 2022.07.21 |