-
- 예외처리란(Exception, Error Handling)
- 코드를 완벽하게 짰다고 해서 항상 프로그램이 성공적으로 도는 것은 아닙니다. 다양한 예외 상황이 발생할 수 있다 이것에 대응하기 위해서 예외 처리 코드가 필요하다.
- 예외처리의 목적
- 예외의 발생으로 인한 실행 중인 프로그램의 비정상 종료를 막기 위해서
- 개발자에게 알려서 코드를 보완할 수 있도록 하게 위해서
- 자바에서는 상속을 이용해서 모든 예외를 표현/ 모든 예외 클래스는 Throwable의 자손 클래스
- Throwable 에는 크게 두 종류의 자식 클래스가 있다.
- Error 는 프로그램이 종료되어야 하는 심각한 문제를 표현합니다. 대부분 컴퓨터나 JVM이 시스템적으로 동작할 수 없는 상황을 표현합니다.
- 더보기
ex) Java는 JVM내의 Heap이라는 메모리 공간을 운영체제로부터 할당 받아 사용하는데 할당 받을 수 있는 최대 메모리 이상을 사용하면, JVM이 다운될 수 밖에 없다. 이 경우 OutOfMemoryError가 나면서 프로그램이 종료된다. 이러한 자바의 대표적인 에러 상황으로 줄여서 OOM이라고도 한다.
- Exception 은 프로그램이 종료되지는 않지만 예외나 문제상황을 표현하기 위해 사용
- 자바에 미리 정의 되어있는 예외 클래스 들이 있다. 기본적으로 이미 있는 것을 사용하되, 필요한 것으로 표현할 수 없거나 구체적인 목적을 가진 예외를 정의하고 싶다면, Throwable 또는 그 하위에 있는 예외 클래스를 상속받아서 자신만의 예외 클래스를 정의할 수 있다
(아래 사진은 자바의 기본 예외 클래스들 중 대표적인 것들의 상속 관계도)
- 표현하려는 예외 상황은 대부분 Exception 종류일 것입니다.
- 실행도중 발생하는 Exception은 RuntimeException을 상속받아서 정의.
- 파일을 읽고 쓰거나, 원격에 있는 저장소로부터 데이터를 읽고 쓸 때 나는 에러를 표현하려면 IOException을 상속받아서 정의.
자바의 예외 표현
try-catch(-finally)형식(finally는 필수 아님)
```java
try {
// 예외가 발생할 가능성이 있는 코드를 구현.
} catch (FileNotFoundException e) {
// FileNotFoundException이 발생했을 경우,이를 처리하기 위한 코드를 구현.
} catch (IOException e) {
// FileNotFoundException이 아닌 IOException이 발생했을 경우,이를 처리하기 위한 코드를 구현.
} finally {
// 예외의 발생여부에 관계없이 항상 수행되어야하는 코드를 구현.
}
```
좁은 범위의 Exception을 앞에다가 선언
package org.example;
public class Main {
public static void main(String[] args) {
int number = 10;
int result;
for(int i=10; i>=0; i--){
try {
result = number/i;
System.out.println(result);
} catch (Exception e) {
//모든 exception은 getMessage를 가진다.(예외에 이유를 설명)
System.out.println("Excepction 발생 "+e.getMessage());
} finally {
System.out.println("finally입니다.");
}
}
}
}
결과
1
finally입니다.
1
finally입니다.
1
finally입니다.
1
finally입니다.
1
finally입니다.
2
finally입니다.
2
finally입니다.
3
finally입니다.
5
finally입니다.
10
finally입니다.
Excepction 발생 / by zero
finally입니다.
'Java' 카테고리의 다른 글
String literal과 new (0) | 2022.06.09 |
---|---|
객체지향 프로그래밍, JVM (0) | 2022.05.22 |
Java 파일 기본구조 (0) | 2022.05.17 |
Package (0) | 2022.05.17 |
접근 제어자 (0) | 2022.05.17 |
댓글