본문 바로가기
✨ Java/예외 처리(Exception)

자바(JAVA) - 예외 처리(Exception) try ~ catch에 대해 알아보자

by 환풍 2023. 2. 18.
728x90
반응형

try catch 구문을 살펴보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Scanner;
 
public class Exception01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        System.out.print("숫자 입력 : ");
        int a = sc.nextInt();
        System.out.print("숫자 입력 : ");
        int b = sc.nextInt();
 
        System.out.println(" a / b  = " + (a / b ));
    }
}
cs

위 코드를 Scanner로 입력받아 실행시키면, 

이처럼 잘 작동하는 것을 볼 수 있지만, b에 0을 넣어보면 어떻게 될까?

이처럼 에러가 난다. 사실 이건 에러가 뜬게 아니라 첫줄 코드를 자세히 살펴보면 Exception 이라는 예외처리라는 의미이다.

분자를 분모 0으로 나눌 수 없기 때문이다.

첫번째 줄 오른쪽을 보면  / by zero를 볼 수 있다. 왜 예외가 발생했는지 대략적으로 볼 수 있다.

java.lang.ArithmeticException이 중간에 떠있다.

int로 받았는데 문자열을 넣는다면, ArithmeticException 자리에 InputMismatchException  이온다.


그렇다면 이처럼 예외처리 코드가 보이지 않게 try ~ catch 구문을 잘 이용해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.Scanner;
 
public class Exception02 {
 
    public static void main(String[] args) {
 
        System.out.println("프로그램 시작~");
        Scanner sc = new Scanner(System.in);
 
        // 예외를 처리하는 기본 구문.
        try{
            // 예외가 발생할 소지가 있는 코드를 작성.
            System.out.println("숫자 입력 : ");
            int a = sc.nextInt();
            System.out.println("숫자 입력 : ");
            int b = sc.nextInt();
 
            System.out.println(" a / b  = " + (a / b ));
        } catch (Exception e){
            //예외가 발생했을 때 처리 코드 작성
            System.out.println("예외가 발생했습니다.");
            System.out.println(e.getMessage());
            // e.getMesaage()를 하면 왜 예외가 발생했는지 이유가 뜬다.
            // 즉, 예외 발생 이유를 문자열로 리턴.
 
            e.printStackTrace();
            // 예외 발생 위치, 이유를 출력
        }
        System.out.println("프로그램 종료.");
    }
}
 
cs

아까와 똑같이 입력해보았다.

정상적으로 작동하며 catch를 건너뛰고 마지막줄에 있는 프로그램종료 문구가 출력됐다.

그래서 아까와 똑같이 b 자리에 0을 넣었다.

이처럼 예외가 발생했습니다라는 catch문이 출력되고, 예외가 발생했다고 떴다.

마지막에 있는 e.getMessage() 를 넣어주면 / by zero 와 같이 이유가 뜬다.

e.printStackTrace(); 는 위의 빨간 줄과 같이 이유가 뜨는 기능이다.

728x90
반응형

댓글