예외의 핵심은 뒷수습이다. 하지만 제대로 된 수습은 대단히 어려운 문제이다.

여기서는 자바에서 기본적으로 제공하는 뒷수습의 방법만 알아본다.

 

코드를 조금 바꿔보자.

package org.opentutorials.javatutorials.exception;
class Calculator{
    int left, right;
    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    }
    public void divide(){
        try {
            System.out.print("계산결과는 ");
            System.out.print(this.left/this.right);
            System.out.print(" 입니다.");
        } catch(Exception e){
            System.out.println("\n\ne.getMessage()\n"+e.getMessage());
            System.out.println("\n\ne.toString()\n"+e.toString());
            System.out.println("\n\ne.printStackTrace()");
            e.printStackTrace();
        }
    }
} 
public class CalculatorDemo {
    public static void main(String[] args) {
        Calculator c1 = new Calculator();
        c1.setOprands(10, 0);
        c1.divide();
    }
}

주요한 차이점은 아래와 같다.

주의 점 : catch 부분에서 끝나는게 아니라 catch 아래로 로직을 계속 읽는다.

 

결과는 아래와 같다.

 


e.getMessage();

오류에 대한 기본적인 내용을 출력해준다. 상세하지 않다.

아주 간단한 형태의 예외 출력 메시지


e.toString()

e.toString()을 호출한 결과는 java.lang.ArithmeticException: / by zero 이다.

e.toString()은 e.getMessage()보다 더 자세한 예외 정보를 제공한다.

java.lang.ArithmeticException은 발생한 예외가 어떤 예외에 해당하는지에 대한 정보라고 지금을 생각하자.

ArithmeticException 수학적인 계산의 과정에서 발생하는 예외상황을 의미한다. (우리는 어떤 숫자를 0으로 나누려고 하고 있다는 것을 상기하자)


e.printStackTrace()

메소드 getMessage, toString과는 다르게 printStackTrace는 리턴값이 없다.

이 메소드를 호출하면 메소드가 내부적으로 예외 결과를 화면에 출력한다.

printStackTrace는 가장 자세한 예외 정보를 제공한다.

 

문자열을 출력하는게 아니라 어떤 소스코드를, 어떤 로직을 통해서 에러가 발생했는지에 대한 정보를 보여준다.

'📌 java > java' 카테고리의 다른 글

java - finally  (0) 2020.04.28
java - 좀 더 다양한 exception들  (0) 2020.04.28
java - try, catch  (0) 2020.04.10
java - 다형성  (0) 2020.04.04
java - 인터페이스  (0) 2020.04.04
복사했습니다!