1. 예외(Exception)란?
컴퓨터 하드웨어의 고장으로 응용프로그램 실행 오류가 발생하는 것을 자바에서 에러라고 한다. 자바에서는 에러 이외에 예외라고 보는 오류가 있다. 예외란 잘못된 사용 또는 코딩으로 인한 오류를 뜻한다. 예외가 발생되면 프로그램은 곧바로 종료된다는 점에서 에러와 동일하지만, 예외 처리를 통해 계속 실행 상태를 유지할 수 있다.
2. 예외 타입
1) 일반 예외
컴파일러가 예외 처리 코드 여부를 검사하는 예외를 뜻한다.
2) 실행 예외
컴파일러가 예외 처리 코드 여부를 검사하지 않는 예외를 뜻한다.
3. 예외 처리
예외 처리는 try-catch-finally 블록을 사용하여 처리한다. 예외가 발생할 가능성이 있는 코드를 try 블록으로 묶어주고, 예외 발생 시 처리할 코드를 catch 블록에 작성한다. finally 블록은 예외 발생 여부와 관계없이 항상 실행된다.
4. 예외 처리 문법
try {
// 예외가 발생할 가능성이 있는 코드
} catch (Exception e) {
// 예외 발생 시 실행할 코드
} finally {
// 예외 발생 여부와 관계없이 실행할 코드
}
catch 블록에서는 발생한 예외를 처리하는 코드를 작성한다. 예외 객체를 나타내는 참조 변수 e를 사용하여 예외 객체의 정보를 얻을 수 있습니다. 예외 객체는 예외의 종류와 예외가 발생한 위치 등을 포함한다.
Java에서는 다양한 예외 클래스가 제공되며, 예외의 종류에 따라서 다르게 처리할 수 있다.
예를 들어, FileNotFoundException은 파일을 찾을 수 없는 경우 발생하는 예외이다. 이 경우, catch 블록에서 파일을 생성하거나 다른 파일로 대체할 수 있다.
Java에서는 try-catch-finally 블록 외에도 throws 키워드를 사용하여 예외를 처리할 수도 있다.
메서드 또는 생성자에서 throws 예외를 선언하면, 해당 예외가 발생할 가능성이 있는 코드를 호출한 곳에서 예외 처리를 하도록 할 수 있다.
5. 예외 처리 필요성
예외 처리는 프로그램의 안정성과 신뢰성을 높이는 데 중요한 역할을 한다. 따라서 예외 처리는 꼭 필요한 작업이며, 예외 처리를 통해 오류를 미리 예방하고, 오류 발생 시 신속하고 적절한 조치를 취할 수 있다.
6. 코드로 알아보는 예외 처리
package Day14;
/*
에러: 컴퓨터 하드웨어의 고장으로 응용프로그램 실행 오류 발생
예외: 에러 이외 예외라는 오류로, 잘못된 사용 또는 코딩으로 발생된 문제이다. (-> 경험 바탕으로 예측가능)
코드의 잘못된 사용으로 발생되는 에러로, 예외처리를 통해 해결 가능하다는 점이 에러와 다른 점이다.
일반 예외: 컴파일 전에 발생할 수 있는 예외 검사[자바 외부 통신(스트림)]
실행 예외: 컴파일 후에 발생하는 예외
*/
public class Ex01_예외처리 {
// 메소드 선언 (static 선언 이유는? 메인메소드에서 사용하기 위함.)
public static void printLength(String data) {
try {
int result = data.length();
System.out.println("문자 수: " + result);
}
catch( NullPointerException e ) {
System.out.println( e.getMessage() );
}
finally {
System.out.println("마무리 실행");
}
}
// 메인 메소드
public static void main(String[] args) {
System.out.println("프로그램 시작");
printLength("ThisIsJava");
printLength(null);
printLength("ThisIsPython");
// 예외발생: NullPointerException (원인: Cannot invoke "String.length()" because "data" is null)
System.out.println("프로그램 종료");
}
}
package Day14;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Ex02_예외처리 {
public static void main(String[] args) {
try {
Class.forName("java.lang.String");
System.out.println("java.lang.String 클래스 존재");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println();
try {
Class.forName("java.lang.String2");
System.out.println("java.lang.String2 클래스 존재");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String[] array = {"100", "1oo"};
for( int i = 0; i <= array.length; i++) {
try {
int value = Integer.parseInt(array[i]);
}
/*
* catch( NumberFormatException e ) { System.out.println("숫자 반환 불가: " + e ); }
* catch( ArrayIndexOutOfBoundsException e ) { System.out.println("인덱스 초과: " + e
* ); }
*/
catch( Exception e ) {
System.out.println("예외 발생: " + e );
}
}
// 예외 발생1: NumberFormatException (원인: For input string: "1oo")
// 예외 발생2: ArrayIndexOutOfBoundsException (원인: Index 2 out of bounds for length 2)
while(true) {
try {
Scanner scanner = new Scanner(System.in);
int cn = scanner.nextInt();
}
catch( InputMismatchException e ) {
System.out.println("잘못된 입력입니다.");
System.out.println("예외 발생: " + e);
}
}
// 예외 발생: InputMismatchException
}
}
package Day14; // 예외 던지기
// 메소드 내부에서 예외발생할 경우, 메소드 호출했던 곳으로 예외 넘기기
// 장점: 메소드마다 예외처리 할 경우, 코드가 길어지기 때문에 던지기 통해서 코드 간략화시킬 수 있음.
// 관련 키워드: throws
public class Ex03_예외던지기 {
public static void findClass() throws Exception {
Class.forName("java.lang.String2");
}
public static void main(String[] args) {
try {
findClass();
}
catch (Exception e) {
// TODO: handle exception
}
System.out.println("확인");
}
}
'자바(Java)' 카테고리의 다른 글
Java JVM(Java Virtual Machine)과 Runtime Data Area (0) | 2023.02.28 |
---|---|
Java 반복문, 제어문 활용 (console 가위바위보, 예금, 키오스크) (0) | 2023.02.27 |
Java 반복문과 제어문(조건문) (0) | 2023.02.27 |
Java 객체 지향 프로그래밍이란? (0) | 2023.02.27 |
Java 스레드(Thread)란? (1) | 2023.02.27 |