본문 바로가기
프로그래밍/Java

[Java] CheckedException과 UncheckedException의 차이

by 시간많은백수 2023. 10. 11.
반응형

 

💡CheckedException

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
 
public class CheckedExceptionExample {
    public static void main(String[] args) {
        try {
            File file = new File("non_existent_file.txt");
            Scanner scanner = new Scanner(file);
            while (scanner.hasNextLine()) {
                System.out.println(scanner.nextLine());
            }
            scanner.close();
        } catch (FileNotFoundException e) {
            System.err.println("파일을 찾을 수 없습니다.");
        }
    }
}
 
 
cs

 

위의 코드에서는 파일을 읽고자 시도하고 있습니다. File 클래스와 Scanner 클래스는 I/O 작업과 관련되어 있으며 FileNotFoundException은 Checked Exception입니다. 따라서 이 예외를 처리하기 위해 try-catch 블록을 사용하고, 파일이 존재하지 않을 때 예외 처리 코드를 실행합니다.

 

  • Exception 클래스를 상속받는 예외 클래스: Checked Exception은 Java의 Exception 클래스를 상속받는 예외 클래스로 표현됩니다. 사용자 정의 예외 클래스도 마찬가지로 Exception 클래스를 상속받아야 합니다.
  • 예외 처리 강제: Checked Exception은 컴파일 시 예외 처리를 강제합니다. 즉, 예외가 발생하면 해당 예외를 처리하는 코드 블록을 작성해야 합니다. 이것은 try-catch 블록 또는 메서드 선언부에 throws 절을 통해 처리될 수 있습니다.
  • 예외 처리 생략 시 컴파일 오류: Checked Exception을 처리하지 않고 무시하면 컴파일 오류가 발생합니다. 이로 인해 예외 처리를 잊는 것을 방지하고 안정성을 높입니다.
  • I/O 연산, 데이터베이스 연결, 네트워크 통신과 같은 I/O 관련 작업에서 주로 발생: Checked Exception은 주로 입출력 작업과 관련된 예외로 사용됩니다.

 

💡Unchecked Exception (RuntimeException)

1
2
3
4
5
6
7
8
9
10
11
12
public class UncheckedExceptionExample {
    public static void main(String[] args) {
        int[] numbers = {123};
        try {
            int result = numbers[5/ 0;
            System.out.println("결과: " + result);
        } catch (ArithmeticException e) {
            System.err.println("0으로 나누기 예외가 발생했습니다.");
        }
    }
}
 
 
cs

 

이 코드는 배열의 범위를 넘어서 5번째 요소에 접근하고 있으며 0으로 나누려고 시도하고 있습니다. 이는 Unchecked Exception인 ArrayIndexOutOfBoundsException와 ArithmeticException을 발생시킵니다. 예외 처리는 선택 사항이며, 이 코드에서는 ArithmeticException을 처리하고 있습니다.

 

  • RuntimeException 클래스를 상속받는 예외 클래스: Unchecked Exception은 RuntimeException 클래스를 상속받는 예외 클래스로 표현됩니다. 또한 RuntimeException 클래스를 상속받지 않는 사용자 정의 예외도 Unchecked Exception으로 간주될 수 있습니다.
  • 예외 처리 선택 사항: Unchecked Exception은 예외 처리가 선택 사항입니다. 즉, 개발자가 필요에 따라 예외 처리를 할 수 있지만 강제로 처리할 필요는 없습니다.
  • 예외 처리 생략 시 런타임 오류: Unchecked Exception은 예외 처리를 생략해도 컴파일은 되지만, 실행 시 오류가 발생하게 됩니다. 따라서 개발자가 예외 처리를 선택적으로 수행할 책임을 가집니다.
  • 배열 인덱스 오버플로우, NullPointerException, ArithmeticException과 같은 런타임 시 예외 상황에서 주로 발생: Unchecked Exception은 주로 프로그램 실행 중에 발생하는 예외로, 예상치 못한 상황 또는 프로그램 논리 오류를 나타냅니다.

 

💻결론

  • Checked Exception은 예외 처리를 강제하며 컴파일러가 확인하는 예외입니다.
  • Unchecked Exception은 예외 처리가 선택 사항이며 컴파일러가 확인하지 않습니다.
  • Checked Exception은 주로 I/O 관련 작업에서 발생하고, Unchecked Exception은 런타임 시 발생하는 예외 상황에서 주로 발생합니다.
  • 개발자는 Checked Exception을 무시할 수 없으며 Unchecked Exception은 예외 처리를 선택적으로 수행할 수 있습니다.
반응형