▶ 예외처리
- 시스템 에러를 제외한 컴파일 에러, 런타임 에러, 논리 에러와 같은 비교적 덜 심각한 것을 가지고 작업을 할 예정이며 이런 것들을 "예외"라고 부른다 (Exception)
- 이러한 예외들이 발생했을 경우에 대비해 "처리"하는 방법을 "예외처리"라고 함
- 예외처리를 해야하는 이유 : 예외 발생시 프로그램이 비정상적으로 종료되는 것을 막기 위함.
■ 예외처리 구문
- 예외처리 구문이란 예외가 발생했을 경우를 대비해서 실행할 내용을 정의해두는 것
■ 에러 (오류) 종류
- 시스템 에러 : 컴퓨터의 오작동으로 인해 발생하는 에러 => 소스코드로 해결 불가
- 컴파일 에러 : 소스코드상의 문법적인 문제로 발생하는 에러 => 빨간줄로 알려줌 => 소스코드 수정으로 해결 가능
- 런타임 에러 : 소스코드상으로는 문제가 없는데 프로그램 실행 중 발생하는 에러 => 사용자의 잘못이거나 혹은 개발자가 예측하지 못한 케이스
- 논리 에러 : 소스코드상의 문법적인 문제도 없고, 실행했을때도 문제없지만 프로그램 의도상 맞지 않는 것
■ 예외처리 방법
- 1. try ~ catch문을 이용하는 방법
- 2. throws를 이용 (떠넘기기)
■ try ~ catch문
[표현법]
try {
// 예외가 발생할 수 있는 구문
} catch (발생될 예외 클래스 변수명 (매개변수)) {
// 위 예외가 발생했을 경우 실행할 구문
}
■ 특징
ArrayIndexOutOfBoundsException와 NegativeArraySizeException 를 활용한 예시
방법 1.
System.out.print("배열의 크기를 지정하세요 : ");
int size = sc.nextInt();
if (size > 0) {
int[] arr = new int[size];
}
try {
int[] arr = new int[size]; // 에러발생시 try블럭 안의 아래 내용은 실행되지 않는다.
System.out.println(arr[100]);
} catch (NegativeArraySizeException e) { // 해당 catch블럭이 실행되면 아예 try ~ catch블럭을 빠져나간다.
System.out.println("배열의 크기로는 음수를 제시할 수 없습니다.");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("부적절한 인덱스로 접근했습니다.");
}
방법 2.
try {
int[] arr = new int[size]; // 에러발생시 try블럭 안의 아래 내용은 실행되지 않는다.
System.out.println(arr[100]);
} catch (ArrayIndexOutOfBoundsException e) {
// 다중 catch 작성시 블럭의 순서가 중요함 => 범위가 작은 자식타입의 예외클래스를 먼저 기술해야한다.
} catch (RuntimeException e) { // 다형성을 적용하여 부모타입 예외 클래스를 작성할 수 있다.
System.out.println("예외가 발생했는데, 배열의 크기를 음수로 지정했거나, 부적절한 인덱스로 접근했을 것.");
// 다중 catch블럭보다 예외는 적어졌지만 정확히 어떤 예외인지 알 수 없다.
}
- 에러발생시 try 블럭 안의 아래 내용은 실행되지 않는다.
- 다중 catch 작성시 블럭의 순서가 중요하다. (범위가 작은 자식타입의 예외클래스를 먼저 기술해야 한다.)
■ throws
- 지금 현재 메서드에서 발생한 예외를 본인을 호출한 메서드로 떠넘기는 키워드
'JAVA' 카테고리의 다른 글
JAVA (21) CheckedException (0) | 2023.04.12 |
---|---|
JAVA (20) UnCheckedException (0) | 2023.04.12 |
JAVA (18-7) API (DATE) (0) | 2023.04.12 |
JAVA (18-6) API (Wapper) (0) | 2023.04.11 |
JAVA (18-5) API (StringTokenizer) (0) | 2023.04.11 |