Exception이란?
Exception이란 프로그램 실행 중 발생하는 이벤트로, 프로그램 명령어의 정상적인 흐름을 방해한다.
Exception은 사용자의 잘못된 조작이나 개발자의 개발 실수에 의해 발생하는 프로그램 오류를 말한다.
Java는 오류가 발생하거나 발생할 여지가 있는 여러 상황에 대한 예외(Exception)를 만들어두었다.
메서드 내에서 오류가 발생하면 객체(error 유형 및 error가 발생했을 때의 프로그램 상태 포함)를 생성하여 런타임 시스템에 넘김
예외 객체를 생성하여 런타임 시스템에 넘기는 것을 "Exception을 throw한다" 라고 한다.
Checked Exception / Unchecked Exception
Java의 Exception에는 2가지 종류가 있다.
Java는 에러를 자바 프로그램 입장에서의 에러 발생 근원에 따라 2가지로 구분해놓았다.
- 자바 프로그램 "외부"에서 발생하는 것 : Checked Exception
- 자바 프로그램 "내부 로직"에서 발생하는 것 : Unchecked Exception
Checked Exception
- Runtime 시점에 발생하지 않고 Compile 시점에 발생해서 무조건 체크해야하는 Exception 이다.
- 반드시 예외 처리를 해야한다.
예외 처리 방법에는 [try-catch / throw] 2가지 방법이 있다.
public static void main(String[] args) {
File file = new File("not_existing_file.txt");
FileInputStream stream = new FileInputStream(file); // 여기서 컴파일 에러 발생
해당 코드는 Checked Exception중 하나인 FileNotFoundException 예시이다.
존재하지 않는 파일을 읽으라고 명령했는데 파일이 존재하지 않을때 발생하는 FileNotFoundException 이다.
해당 코드를 실행하면
error: unreported exception FileNotFoundException; must be caught or declared to be thrown FileInputStream stream = new FileInputStream(file); 라고 에러가 난다.
해당 오류는 Checked Exception인 FileNotFoundException을 예외처리 안했다고 알려주는 에러이다.
이처럼 Checked Exception은 컴파일 시점에 예외처리를 하지 않으면 컴파일 에러가 발생한다.
public static void main(String[] args) {
File file = new File("not_existing_file.txt");
try {
FileInputStream stream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
FileNotFoundException 에러를 예외처리 try-catch를 이용해서 예외처리를 해준 코드이다.
해당 코드처럼 예외처리를 하게되면 Process finished with exit code 0이 뜨게되고
exit code 0 이면 코드가 정상적으로 종료되었다 라는 뜻이다.
exit code 1 이면 코드가 비정상적으로 종료되었다 / 예외 처리를 제대로 못했다 라는 뜻이다.
Unchecked Exceoption
- Unchecked Exception 에러처리를 강제하지 않고, 런타임 단계에서 발생할 수 있는, 확인 할 수 있는 Exception이다.
- RuntimeException을 상속하는 클래스이다.
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int index = 10;
System.out.println(arr[index]); // 컴파일 에러 발생 X
해당 코드는 Unchecked Exception의 예시이다.
실행하면 exit code 1이 뜨면서 ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 5
에러가 발생한다.
Unchecked Exception 의 예외 처리를 강제하지 않는 이유는 간단하게 위와 같은 배열에서 원소를 출력하고 싶을때에도
try-catch와 같은 예외 처리를 작성해야한다.
이런 RuntimeException는 개발자들의 실수로 발생하는 것들이기 때문에 예외 처리를 강제하지 않는다,.
참고 자료
'Backend > Java' 카테고리의 다른 글
Lombok 에 대해서 / Lombok 활용법 (0) | 2024.09.27 |
---|---|
JDK / JRE 는 무엇인가? (0) | 2024.09.25 |