자바/자바 입문 공부일지

자바 기초 공부 일지 28. 예외의 처리 try~catch 구문

Tomitom 2022. 11. 1. 09:16
반응형

 

 

 

파이썬에서 exception  처럼, 자바에서 예외의 상황을 차리 하기 위한  클래스가 있습니다. 

https://blue-dot.tistory.com/28

 

파이썬 공부 요약 노트 4. 예외, 오류

● 오류의 종류 - 구문 오류 : 문법이 잘못 되어서 실행할 수 없는 문제 -> 코드를 다시 써야 해결 된다. - 실행 예외 : 문법은 맞지만 논리가 잘못 되어서 실행할 수 없는 문제 -> 예외. 앞뒤로 코드

blue-dot.tistory.com

 

우선 자바에서 예외를 알리기 위한 클래스가 다음과 같습니다. 

 

java.lang.ArithmeticException 수학 연산에서의 오류 상황을 의미하는 예외 클래스
java.util.InputMismatchException 클래스 Scanner를 통한 값의 입력에서의 오류 상황을 의미하는 예외 클래스

 

예외의 처리를 위한 코드를 위한 예외 처리 메커니즘은 다음과 같습니다. 

 

try {
   ...관찰 영역...
 }

 

catch(ArithmeticException e) {
   ...처리 영역...
 }

 

try 안의 값에서 예외가 발생하면 catch 영역에서 예외를 처리합니다. 

즉 try 안의 예외 코드와 객체를 인수로 받아 그 처리를 담당하는 곳이 cathc 블록입니다.

 

package day16;



import java.util.Scanner;

public class Exception01 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt(); 
		System.out.println(4 / a);
	}
}

 

만약 a의 값을 0 으로 스캔을 한다면 0으로 나눌 수는 없으니 값은 오류가 뜹니다. 

 

 

이 때 예외처리를 해서 오류를 방지해야 합니다. 

 

package day16;



import java.util.Scanner;

public class Exception01 {

	public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in);
		
		try {
		int a = sc.nextInt(); 
		System.out.println(4 / a);
		}catch(ArithmeticException e) {
			System.out.println(e); 
		}
	}
}

 

예외가 발생하면 어떻게 처리하는지 과정을 기재한다면 다음과 같습니다.

 

try {

   1. ...

   2. 예외 발생 지점

   3. ...

}

 

catch(Exception e) { 예외의 처리 

   ...

}

4. 예외 처리 이후 실행 지점

 


즉 상기의 코딩과 같이 이것은 둘 이상의 예외를 처리할 때도 가능합니다.

try 구문 안에서 예외가 발생하면 바로 catch 로 넘어가고, catch 구문 실행 후 예외 처리 구문이 완전히 종료 됩니다. 

try 구문 안에서 예외가 발생하지 않으면 try 구문 실행 후 예외 처리 구문이 완전히 종료 됩니다. 

try 블록에서 예외가 발생한 이후 순차적으로 catch의 블록에서 해당 예외를 처리할 수 있는지 확인하고 

내부 catch 블록에서 예외를 찾을 수 없다면 바깥의 try 의 catch 블록을 차례대로 검사합니다. 

 

 

다음과 같은 예시를 볼게요. 

각각의 예외의 경우에 따라 catch 를 중복으로 사용해서 처리할 수도 있으며, 또는 || 의 연산자로 처리하는 것 또한 가능합니다. 

 

   catch(ArithmeticException | InputMismatchException e) {
       e.getMessage();

 

이렇게 예외의 경우에 따른 예외 처리를 방지하여 미리 작성할 수 있습니다. 

 

 

 

반응형