반응형

● 자바(java)에서 말하는 예외란

 

예외(Exception) 즉, '예외적인 상황'을 줄여서 '예외'라고 한다. 이는 단순한 문법 오류가 아닌

실행 중간에 발생하는 '정상적이지 않은 상황'을 뜻한다.

 

 

 

 

자바(java)에서 말하는 예외처리란 

 

예외 상황에 대한 처리를 의미한다. 그리고 자바는 예외처리 메커니즘을 제공한다. 

 

아래는 예외 상황의 예시이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
   Scanner a = new Scanner(System.in);
 
   System.out.print("a/b...a? ");
   int n1 = a.nextInt();    // int형 정수 입력
 
   System.out.print("a/b...b? ");
   int n2 = a.nextInt();    // int형 정수 입력
 
   System.out.printf("%d / %d = %d \n", n1, n2, n1 / n2);
   System.out.println("Good bye");
}
 
cs

자바의 기본 예외처리 메커니즘은 문제 발생 지점에 대한 정보 출력과 프로그램 종료다.

또한 예외에 대한 처리 방법은 프로그래머가 결정할 수 있다.

 

 

 

 

● 예외 상황을 알리기 위한 클래스

예외 상황을 알리기 위한 클래스는 여러가지가 있는데 이 글에서는 그 중 두가지를 알아보았다. 

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

이러한 예외의 처리를 위한 클래스들을 try ~ catch 구문을 활용하여 사용해보았다.

예외의 처리를 위한 코드를 별도로 구분하기 위해 디자인된 예외처리 메커니즘이 try ~ catch 이다.

 

 

 

 

try ~ catch 의 실행 흐름은 아래와 같다.

try{

   ...관찰 영역...                     관찰 영역은 try로 감싸야 할 영역의 결정이며,

   1. ...                                    입력 오류에 대한 예외의 관점에서 보았을 때 이는 하나로 묶여 보여진다.

   2. 예외 발생 지점                                  

   3. ...

}

catch(ArithmeticException e) {

   ...처리 영역...

}

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

 

 

 

 

 

직접  try ~ catch 를 이용한 실행 흐름과 예외 처리를 해 보았다.

 

그 결과 예외 발생 지점인 public static void md2에서 예외를 처리하지 않으면 해당 메소드를 호출한 영역인 class ExceptionMessage로 예외가 전달된다. 

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
33
34
35
package try_catch_practice;
 
import java.util.InputMismatchException;
import java.util.Scanner;
 
class ExceptionMessage
{
    public static void ko1(int n) {
       ko2(n, 0);
    }
 
    public static void ko2(int n1, int n2) {
        int r = n1 / n2; // 예외 발생 지점에서 예외를 처리하지 않으면 해당 메소드를 호출한 영역으로 예외 전달.
    }
 
}
public class try_catch {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);
 
        try {
            System.out.println("a/b..a? ");
            int n1 = scan.nextInt();
            System.out.println("a/b..b? ");
            int n2 = scan.nextInt();
            System.out.printf("%d / %d = %d \n", n1, n2, n1 / n2); // 예외 발생 지점
        } catch (ArithmeticException | InputMismatchException e) {
            System.out.println(e.getMessage());
        }
        System.out.println("EXIT");
        ExceptionMessage.md1(3);
    }
 
}
cs

 

 

 

 

● 아래의 코드 실행 결과를 보면 예외 처리가 된 것을 확인 할 수 있다.

try ~ catch 구문에서 예외 처리 실행 결과

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기