(1) 예외 처리란?
코드를 완성했다고 항상 프로그램이 성공적으로 작동하는 것은 아니다. 다양한 예외 상황이 발생할 수 있는데, 이것에 대응하기 위해 예외처리 코드가 필요하다. 즉, 예외의 발생으로 인해 프로그램의 비정상적인 종료를 막기위해, 또한, 개발자에게 알려 코드를 보완할 수 있도록 하기위해 예외 처리를 사용한다.
자바는 상속을 이용해서 모든 예외를 표현한다. 모든 예외 클래스틑 Throwable의 자손 클래스다. Throwalbe 에는 크게 두종류의 자식 클래스가 있다.
구분 설명
--------------------------------------------------------------------------------
Error 프로그램이 종료되어야 하는 심각한 문제를 표현한다.
대부분 컴퓨터나 JVM이 시스템적으로 동작할 수 없는 상황을 표현한다.
Exception 프로그램이 종료되지 않지만, 예외나 문제상황을 표현하기 위해 사용한다.
자바에는 미리 정의되어 있는 예외 클래스들이 있다. 기본적으로 이미 있는 것을 사용하되, Throwable 또는 그 하위 클래스를 상속받아 예외클래스를 정의할 수 있다.
(2) 예외처리 형식
기본적으로 예외처리는 다음과 같은 형식으로 사용한다.
try {
// 예외가 발생할 가능성이 있는 코드를 구현합니다.
} catch (FileNotFoundException e) {
// FileNotFoundException이 발생했을 경우,이를 처리하기 위한 코드를 구현합니다.
} catch (IOException e) {
// FileNotFoundException이 아닌 IOException이 발생했을 경우,이를 처리하기 위한 코드를 구현합니다.
} finally {
// 예외의 발생여부에 관계없이 항상 수행되어야하는 코드를 구현합니다.
}
예시를 들면 다음과 같이 사용할수 있다.
class ArrayCalculation {
int[] arr = { 0, 1, 2, 3, 4 };
public int divide(int denominatorIndex, int numeratorIndex) {
return arr[denominatorIndex] / arr[numeratorIndex];
}
}
public class main {
public static void main(String[] args) {
ArrayCalculation arrayCalculation = new ArrayCalculation();
System.out.println("2 / 1 = " + arrayCalculation.divide(2, 1));
try{
System.out.println(
"1 / 0 = " + arrayCalculation.divide(1, 0)); // java.lang.ArithmeticException: "/ by zero"
} catch (ArithmeticException e){
System.out.println("잘못된 계산입니다. " + e.getMessage());
}
try{
System.out.println("Try to divide using out of index element = "
+ arrayCalculation.divide(5, 0)); // java.lang.ArrayIndexOutOfBoundsException: 5
} catch (ArrayIndexOutOfBoundsException e){
System.out.println(
"잘못된 index 범위로 나누었습니다. 범위는 0부터" +
(arrayCalculation.arr.length - 1) +
"까지입니다.");
}
}
}
'Java' 카테고리의 다른 글
13. Java, 컬렉션(Collection) (0) | 2022.11.08 |
---|---|
12. Java(API), 시간 다루기 (0) | 2022.11.07 |
10. Java(기초), 객체 지향 언어 - 추상클래스, 인터페이스 (0) | 2022.11.07 |
09. Java(기초), 객체 지향 언어 - 접근제어자(Access modifier) (0) | 2022.11.07 |
08. Java(기초), 객체 지향 언어 - 상속(Inheritance) (0) | 2022.11.07 |