스프링을 복습하면서 예외를 공부하는 시간이 다가왔다.
이전부터 항상 예외를 공부할 때면 나도 모르게 움츠러 들게 되는 느낌... 이라 ... 쫄지 않고자...! 정리 하려고 한다.ㅎㅎ
뭔가 정리하고 넘어가야 그래도 다음에 덜 무서워 할 것 같은 느낌!
예외는 종류도 워낙 많고 우리가 평소에 보는 오류들과도 관련이 있다 생각하니 내가 많이 부족한가?! 하는 생각도 많이 들고 쉽지 않게 느껴지는 듯 하다.
🔵 예외의 종류
Throwable 은 모든 에러와 예외의 최상위 클래스
- 에러
- 예외 (체크 예외, 언체크 예외)
에러(Error)
에러는 자바 JVM에 문제가 생겼을 때, 하드웨어 자체에 문제가 생겼을 때 등 과 같이 비정상적인 상황에서 발생한. 애플리케이션에 던지는 것으로 개발자가 직접 할 수 있는 것은 없다.
➡️ 자체적 문제이기 때문에 try~catch 할 필요가 없다.
예외(Exception)
프로그램 실행 중 발생하는 예외를 나타내는 클래스로 애플리케이션 코드에서 예외가 발생했을 때 사용된다. 체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception)로 구분된다.
체크 예외(Checked Exception)
Checked Exception은 예외처리를 해야 하는 예외이다.
‘try~catch’ 또는 throw를 통해 예외를 잡거나 던져줘야 하는 예외로 RuntimeException에 속하지 않는 모든 예외를 말한다.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class CheckedExceptionExample {
public static void main(String[] args) {
String filePath = "file.txt";
try {
BufferedReader reader = new BufferedReader(new FileReader(filePath));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
reader.close(); // 파일 리소스 닫기
} catch (IOException ex) {
System.err.println("파일을 읽는 도중 오류가 발생했습니다: " + ex.getMessage());
}
// 이 부분은 try-catch 블록을 통해 처리되었기 때문에 프로그램이 비정상적으로 종료되지 않음
System.out.println("프로그램 정상 종료");
}
}
언체크 예외(Unchecked Exception)
Unchecked Exception은 예외처리를 해주지 않아도 되는 예외이다.
RuntimeException에 속하는 모든 예외를 말한다.
public class UncheckedExceptionExample {
public static void main(String[] args) {
int[] numbers = { 1, 2, 3, 4, 5 };
int index = 10; // 배열의 범위를 초과하는 인덱스
try {
int result = numbers[index]; // 배열에서 예외 발생
System.out.println("Result: " + result); // 이 부분은 실행되지 않음
} catch (ArrayIndexOutOfBoundsException ex) {
System.err.println("ArrayIndexOutOfBoundsException: " + ex.getMessage());
}
// 이 부분은 try-catch 블록을 통해 처리되었기 때문에 프로그램이 비정상적으로 종료되지 않음
System.out.println("프로그램 정상 종료");
}
}
📘 참고 자료 📘
🔗 https://docs.oracle.com/javase/specs/jls/se7/html/jls-11.html#jls-11.1.1
🔗 https://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html
🔗 https://mangkyu.tistory.com/152
🔗 https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html
솔직히 예외를 정리하기 전 까지는 예외를 던진다. 처리한다. 잡는다. 는 말이 무슨 말인지도 이해가 잘 가지 않았다. 그래서 예외를 던져서 처리를 한다고 하길래...예외를 던지면 어디로 던져지는 것인지..?! 가 너무 헷갈렸다.
던진다 라는 말이 이해가 잘 안 갔던 것 같다.
던져서 예외를 발생시킨다. 라고 하면 오히려 이해가 쉬웠을지도 모르겠다?!는 생각...🤔
그리고 던진다고 하니 던져서 계속 넘겨줄 것 같았다. (책임전가같은.....) 그런 탓에 계속 넘겨주고 넘겨주고 넘겨주면 결국 처리는 누가 하지...? 또 예외가 발생되는 것 아닌가 하는 생각을 했다...ㅎㅎ
지금 생각하니 조금 기발한 생각인 듯... 후....ㅠ 나혼자 복잡했던 예외 공부하기 드디어 했다: )
'LANGUAGE > JAVA' 카테고리의 다른 글
[JAVA] 자바 11에서 17로 버전 업그레이드 (0) | 2024.01.08 |
---|---|
[JAVA] 가비지 컬렉션(Garbage Collection)의 역할 및 동작방법 (0) | 2023.10.09 |
[JAVA] Iterator 의 사용 목적과 특징 / Collection Framework (0) | 2023.06.26 |
[JAVA] Array, ArrayList, LinkedList 비교하기 / 차이점 (2) | 2023.06.26 |
[JAVA] 자바 컨테이너(컬렉션 프레임워크 / Collection Framework)란? (0) | 2023.06.25 |