cs/ODOQ

[ODOQ] Checked Exception, Unchecked Exception

icodesiuuuu 2024. 11. 26. 23:54

[One Day One Question]

자바에서 Checked Exception과 Unchecked Exception의 차이점을 설명해 주세요


1. Checked Exception

  • 정의
    Checked Exception은 컴파일러가 예외 처리를 강제로 요구하는 예외입니다.
    즉, 이러한 예외가 발생할 가능성이 있는 코드는 반드시 try-catch 블록으로 처리하거나, 해당 메서드의 throws 선언부에 명시해야 합니다.
  • 특징
    • 컴파일 단계에서 확인되며, 처리되지 않으면 컴파일 에러가 발생합니다.
    • 예외 처리가 필수적이므로, 프로그램의 안정성을 높이는 데 도움을 줍니다.
    • 주로 외부 환경과의 상호작용에서 발생하는 예외에 해당합니다.
  • 예시
    • IOException (파일 입출력 관련)
    • SQLException (데이터베이스 관련)
    • ClassNotFoundException (클래스 로딩 실패)
  • 예시 코드
import java.io.File;
import java.io.FileReader;

public class CheckedExceptionExample {
    public static void main(String[] args) {
        try {
            File file = new File("nonexistent.txt");
            FileReader fr = new FileReader(file); // IOException 발생 가능
        } catch (Exception e) {
            System.out.println("예외 발생: " + e.getMessage());
        }
    }
}

 

 

2. Unchecked Exception

  • 정의
    Unchecked Exception은 컴파일러가 예외 처리를 강제하지 않는 예외입니다.
    이러한 예외는 런타임 중에 발생하며, 개발자가 필요에 따라 예외 처리를 할 수 있습니다.
  • 특징
    • 컴파일러가 예외 처리 여부를 검사하지 않습니다.
    • 런타임에 발생하는 오류이므로, 주로 프로그래머의 실수나 논리적인 오류로 인해 발생합니다.
    • 예외 처리가 선택 사항입니다.
  • 예시
    • NullPointerException (null 참조 접근)
    • ArrayIndexOutOfBoundsException (배열 범위 초과)
    • ArithmeticException (0으로 나누기)
  • 예시 코드
public class UncheckedExceptionExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};
        System.out.println(numbers[3]); // ArrayIndexOutOfBoundsException 발생
    }
}

 

 

 

꼬리 질문

error와 exception의 차이는 무엇인가요?


ErrorException은 모두 Throwable 클래스를 상속하지만, 본질적으로 다릅니다. 이 둘의 차이는 주로 발생 원인처리 가능성에 있습니다.

 

1. Error

  • 정의:
    • 시스템 수준의 문제가 발생했을 때 던져지는 심각한 오류.
    • 자바 애플리케이션에서 회복 불가능한 문제를 나타냅니다.
    • Error는 대부분 JVM(Java Virtual Machine)의 동작과 관련된 문제에서 발생합니다.
  • 특징:
    • 개발자가 직접 처리하거나 복구하지 않습니다.
    • 애플리케이션 코드에서 발생하는 것이 아니라 JVM이나 하드웨어의 한계로 인해 발생하는 경우가 많습니다.
    • 대표적인 예:
      • OutOfMemoryError (메모리 부족)
      • StackOverflowError (스택 오버플로우)
      • VirtualMachineError (JVM 문제)
  • 예시:
public class ErrorExample {
    public static void main(String[] args) {
        int[] arr = new int[Integer.MAX_VALUE]; // OutOfMemoryError 발생 가능
    }
}

 

2. Exception

  • 정의:
    • 프로그램 실행 중에 발생할 수 있는 예상 가능한 문제를 나타냅니다.
    • 애플리케이션 코드에서 발생하며, 적절히 처리(try-catch)할 수 있는 문제입니다.
  • 특징:
    • 개발자가 처리하여 복구 가능.
    • 주로 비정상적인 상황(예: 잘못된 입력, 파일 미존재 등)에서 발생합니다.
    • 두 가지 하위 분류:
      1. Checked Exception: 컴파일 시점에 반드시 처리해야 하는 예외.
        • 예: IOException, SQLException
      2. Unchecked Exception: 런타임 시점에 발생하며, 반드시 처리하지 않아도 되는 예외.
        • 예: NullPointerException, ArrayIndexOutOfBoundsException
  • 예시:
import java.io.*;

public class ExceptionExample {
    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new FileReader("nonexistent_file.txt"));
        } catch (IOException e) {
            System.out.println("예외 처리: " + e.getMessage());
        }
    }
}

 

주요 차이점

특성 Error Exception
원인 시스템 수준 문제 (JVM, 메모리 등) 애플리케이션 수준 문제 (입력, 로직 등)
처리 가능성 복구 불가능 복구 가능
개발자 처리 여부 일반적으로 처리하지 않음 try-catch로 처리 가능
예시 OutOfMemoryError, StackOverflowError IOException, NullPointerException

'cs > ODOQ' 카테고리의 다른 글

[ODOQ] DB 인덱스(Index)  (0) 2024.11.28
[ODOQ] 일급 컬렉션  (0) 2024.11.27
[ODOQ] JPA의 N + 1  (0) 2024.11.25
[ODOQ] TCP와 UDP의 차이점  (1) 2024.11.25
[ODOQ] HTTP와 HTTPS의 차이점  (0) 2024.11.24