[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의 차이는 무엇인가요?
Error와 Exception은 모두 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)할 수 있는 문제입니다.
- 특징:
- 개발자가 처리하여 복구 가능.
- 주로 비정상적인 상황(예: 잘못된 입력, 파일 미존재 등)에서 발생합니다.
- 두 가지 하위 분류:
- Checked Exception: 컴파일 시점에 반드시 처리해야 하는 예외.
- 예: IOException, SQLException
- Unchecked Exception: 런타임 시점에 발생하며, 반드시 처리하지 않아도 되는 예외.
- 예: NullPointerException, ArrayIndexOutOfBoundsException
- Checked Exception: 컴파일 시점에 반드시 처리해야 하는 예외.
- 예시:
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 |