1. 예외 처리
▷ 예외
: 프로그램의 정상적인 흐름을 방해하는 원치 않는 이벤트
▷ 예외 처리
: 애플리케이션의 정상적인 흐름을 유지할 수 있도록 런타임 오류를 처리하는 강력한 방법 중 하나
2. 예외의 유형과 클래스
예외의 유형
- 컴파일 예외 : 컴파일러가 컴파일 시간에 확인하는 검사형 예외
-> 메서드 내부에 확인된 예외가 있는 경우 메서드는 예외를 처리하거나 throw 키워드를 통해 예외 처리
- 런타임 예외 : 런타임에 발생하는 비검사형 예외
-> 예외를 처리할 지 말지는 전적으로 프로그래머에게 달려 있음
예외 클래스
- 예외의 모든 유형은 Throwable 클래스의 하위 클래스
- 예외 클래스는 프로그램이 오류가 발생하기 전에 잡아내야 하는 예외적인 조건을 위한 클래스이므로 사용자별 예외 클 래스를 생성하도록 확장됨
3. 예외 처리 방법
키워드 | 설명 |
try | 예외 코드를 배치할 블록을 지정하기 위해 사용 단독으로 X -> catch 나 finally가 뒤따라야함 |
catch | 단독으로 X -> try 나 finally가 뒤따라야함 |
finally | 프로그램에서 꼭 필요한 코드를 실행하는데 사용 예외 처리 여부에 관계 없이 실행 |
throw | 예외를 고의로 발생 |
throws | 자신을 호출한 상위 메서드로 오류를 던지는 역할 |
- try ~ catch문
: 프로그램 실행 중 예외를 일으킬 수 있는 코드를 try 로 묶고 catch 로 예외를 처리
try 블록 다음에 catch 블록을 사용
try {
// try 블록의 명령문
}
catch(예외클래스 e) {
// catch 블록의 명령문: 예외 처리 <- try 블록에서 예외 발생 시 실행
}
예제) 0으로 나누는 잘못된 연산으로 예외가 발생했을 때의 try~catch 문의 예외 클래스 AtrithmeticException으로 처리
public class Example01 {
public static void main(String[]args) {
try {
int a = 0;
int b = 5/a;
}
catch(ArithmeticException e) {
System.out.println("0으로 나눕니다.");
}
System.out.println("try~catch문의 외부 문장입니다.");
}
}
실행 결과)
0으로 나눕니다. try~catcatch문의 외부 문장입니다. |
- 다중 catch문
: 예외의 유형이 확실하지 않을 때 try 블록 다음에 여러 개의 catch 블록을 작성
예제) 다중 catch문의 사용 예시
public class Example02 {
public static void main(String[] args) {
try {
Integer in = new Integer("abc");
in.intValue();
}
catch(ArithmeticException e) {
System.out.println("예외 발생 ArithmeticException " + e);
}
catch(NumberFormatException e) {
System.out.println("예외 발생 NumberFormatException " + e);
}
System.out.println("try~catch문의 외부 문장입니다.");
}
}
실행 결과 )
예외 발생 NumberFormatException java.lang.NumberFormatException: For input string: "abc" try~catch문의 외부 문장입니다. |
- try ~ catch ~ finally 문
: finally 블록은 예외 발생 여부에 관계없이 실행 ( try~catch문이 실행된 후 실행)
try {
// try 블록의 명령문
}
catch (Exception e) {
// catch 블록의 명령문
}
finally {
// finally 블록의 명령문
}
예제)
public class Exception03 {
public static void main(String[] args) {
int[] arr = {10, 20, 30};
try {
for(int i = 0; i <= 3; i++) {
System.out.println("arr[" + i + "] : " + arr[i]);
}
}
catch(Exception ex) {
System.out.println("예외 처리입니다....");
System.out.println(ex.getMessage());
}
finally {
System.out.println("예외 발생 여부와 상관없이 실행됩니다.");
}
}
}
실행 결과)
arr[0] : 10 arr[1] : 20 arr[2] : 30 예외 처리입니다.... Index 3 out of bounds for length 3 예외 발생 여부와 상관없이 실행됩니다. |
- throws 키워드
: 프로그램 실행 중 메서드가 예외를 발생시킬 수 있도록 함
예외가 발생했을 때 발생한 메서드에서 직접 처리하지 않고 자신을 호출한 곳으로 떠넘기도록 함
메서드유형 메서드명(매개변수목록) throws 예외처리목록 {
// 구현 코드
}
예제) throws, throw 키워드를 사용하여 예외 처리
import java.util.Scanner;
public class Exception04 {
static void check(int num) throws NumberFormatException {
if (num < 0)
throw new NumberFormatException("0보다 작습니다.");
else
System.out.println(num);
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("숫자를 입력하세요.");
int num = s.nextInt();
try {
if (num < 0)
throw new NumberFormatException("0보다 작습니다.");
else
System.out.println(num);
check(num);
} catch(NumberFormatException e) {
System.out.println("예외 발생 " + e);
}
}
}
실행 결과)
숫자를 입력하세요. -1 예외 발생 java.lang.NumberFormatException: 0보다 작습니다. |
'Study > Java Study' 카테고리의 다른 글
JAVA 프로그래밍 및 실습 [중간 정리 요약본] (0) | 2023.10.21 |
---|---|
12장. 파일 입출력 (0) | 2023.05.28 |
10장. 패키지 (0) | 2023.05.28 |
9장. 추상 클래스와 인터페이스 (0) | 2023.05.22 |
8장. 상속과 다형성 (1) | 2023.05.21 |