예외처리 - 1. 예외(Exception) 및 예외 처리

Ⅰ. 예외(Exception) 및 예외 처리

 - 코드는 문법을 기반으로 작성함

 - 문법을 틀리면, 코드가 동작할 수 없음 (컴파일러가 컴파일을 안 해주기 때문)

 

1. 예외(Exception) 에러(Error)의 차이점

 - 오류(Error) : 문법이 틀려서 동작할 수 없는 상태 → 수습 불가능, 코드를 수정해야 함

 - 예외(Exception) : 문법은 맞는데 프로그램 논리적으로 맞지 않아 발생하는 객체 → 수습 가능, 코드를 추가하여 피해감

 

2. 예외 처리

 - 예외의 종류는 무척 다양함 (또한, 각 예외마다 이름을 가지고 있음)

 - 프로그램 실행 중 예외가 발생하면 프로그램 내에서는 예외 객체가 생성됨

    → 이를 감지하여 처리해 주는 작업을 가리켜 '예외 처리'라고 함

 - 예외 처리를 위해서는 try-catch 문을 사용

    ※ try문의 특징 : 내부에 아무리 긴 코드가 있어도, 예외가 발생하면 코드가 종료됨

        → 중요한 구문을 실행하지 못하는 상황이 발생할 수 있음 (그럴 땐, finally 구문 추가

    ※ finally : 예외처리 되더라도 무조건 실행됨

    ※ Exception : 모든 예외의 조상 클래스로, 다형성이 적용됨

// 기본 문법 구조
try {
	예외가 발생할 수도 있는 구문
} catch(ArithmeticException e) {
	예외 발생시, 구문
}

// Example1
package sample;

public class Main {
	public static void main(String[] args) {
		// 예외처리
		// try : 예외가 발생할지도 모르는 부분을 묶는 구문
		// catch : 예외 처리 방법을 적는 구문. 이 때, 예외를 인자로 받음
		try {
			int a = 4;
			int b = 0;
			
			int c = a / b;	// 문법은 맞으나, 논리적으로 불가능
		} catch(Exception e) {					// 예외 매개변수
			System.out.println("예외 발생을 알립니다");	// 예외 발생을 알립니다.
		}
	}
}

 

// Example2
package sample;

public class Main {
	public static void main(String[] args) {
		try {
			int[] arr = new int[3];
			arr[5] = 3;
		} catch(Exception e) {		// Exception만 써도 예외처리 가능
			System.out.println("예외 발생을 알립니다");	// 예외 발생을 알립니다.
		}
	}
}

 

// Example3
package sample;

public class Main {
	public static void main(String[] args) {
		// try는 예외 발생 지점에서 끝남
		// finally : 예외 처리까지 다 마치고 난 후에 실행될 코드를 묶는 부분
		try {
			int[] arr = new int[3];
			arr[5] = 3;
		} catch(Exception e) {		// Exception만 써도 예외처리 가능
			System.out.println("예외 발생을 알립니다");	// 예외 발생을 알립니다.
		} finally {
			System.out.println("하하");	// 하하
			System.out.println("하하");	// 하하
			System.out.println("하하");	// 하하
		}
	}
}