반응형
Checked Exception 과 Unchecked Exception 은 무슨 차이인가요? (중요)
- 자주 이야기하는 오답
- Checked Exception 은 컴파일할 때 발생하고,
- Unchecked Exception 은 런타임에 발생하는 예외로 알고 있습니다.
- 올바른 답변 !
- Checked Exception 은 컴파일할 때 예외에 대한 처리를 강제
- Unchecked Exception 은 예외에 대한 처리를 강제하지 않습니다.
- 정의되어있지 않은, 새로운 예외를 정의해야할 때는
- → Unchecked Exception 을 상속받아서 쓴다 !
- 대부분의 예외는 로직에서 해결할 수 없기 때문
- Checke Exception을 쓰면, 던지는 예외라는 것이 외부에 알려짐→ 캡슐화가 깨짐
- 예외를 컴파일 도중에 처리하고싶다면, Unchecked 도 try-catch 를 할 수 있다.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ExceptionComparison {
public static void main(String[] args) {
// Checked Exception: 컴파일 시점에서 확인되는 예외
try {
File file = new File("nonexistentfile.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
scanner.close();
} catch (FileNotFoundException e) {
// FileNotFoundException은 Checked Exception으로 예외 처리가 필요함
System.err.println("파일을 찾을 수 없습니다.");
}
// Unchecked Exception (RuntimeException): 컴파일 시점에서 확인되지 않는 예외
int[] numbers = { 1, 2, 3, 4, 5 };
try {
// 배열 범위를 벗어나는 인덱스에 접근하려고 할 때 ArrayIndexOutOfBoundsException이 발생
int value = numbers[10];
} catch (ArrayIndexOutOfBoundsException e) {
// ArrayIndexOutOfBoundsException은 Unchecked Exception으로 예외 처리가 선택사항
System.err.println("배열 인덱스가 잘못되었습니다.");
}
}
}
Checked Exception
- FileNotFoundException은 파일을 찾을 수 없을 때 발생하며 Checked Exception에 해당합니다.
- 파일을 읽을 때 예외 처리가 필요하며, try-catch 블록을 사용하여 처리합니다.
Unchecked Exception (RuntimeException)
- ArrayIndexOutOfBoundsException은 배열 범위를 벗어나는 인덱스에 접근하려고 할 때 발생하며 Unchecked Exception에 해당합니다.
- 예외 처리가 필요하지만 예외 처리를 강제하지 않으며, 선택사항입니다.
- try-catch 블록을 사용하여 처리할 수 있지만, 컴파일러가 예외 처리를 요구하지 않습니다.
인턴 때 했었던 실무와 달리 개인 프로젝트에서는 exception 을 중요하게 다루지 않았다.
예외 처리는 매우 중요한 개념이라고 한다.
반응형
'백엔드 데브코스' 카테고리의 다른 글
[Java] Optional - nullPointException을 잘 다뤄보자 (0) | 2023.09.25 |
---|---|
[Java] Object 클래스와 주요 메서드 - equals(), hashCode(), toString() (0) | 2023.09.22 |
[Java] Enum 이란 (0) | 2023.09.22 |
[Java] 추상클래스(abstract class)와 인터페이스(interface) (0) | 2023.09.22 |
[Java] 객체지향 프로그래밍으로 개발해야하는 이유 / 클래스와 상속 (0) | 2023.09.22 |