0. 예외처리 intro

대부분의 언어에서 그렇겠지만, java에도 예외처리 항목이 존재한다.

예외처리는 크게 다음과같은 방향을 가진다.

  1. 예외가 발생한 메소드에서 처리하기
  2. 예외가 발생한 메소드에서 처리하지 않기
    2-1. 다른 메소드로 전가하기
    2-2. JVM으로 전가하기

1. 예외가 발생한 메소드에서 처리하기

예외를 처리하는 방법은 try~catch 구문을 활용하는 것이다.
try~catch 구문은 예외가 발생할 수 있는 부분을 try{}내에 넣고, 예외가 발생하면 catch구문에서 지정한대로 예외의 후속처리를 진행하게 된다.

  • 이러한 후속처리는 이후 코드를 진행하는 것에 의미가 있다.

예외처리를 하지 않으면, 이후 코드를 진행하지 않고 프로그램이 종료된다. 단, finally 구문이 존재한다면, 이를 출력한후 종료된다.

public class ExceptionTest1 {

   public static void main(String[] args) {
      try {
         String [] str = {"1", "0"};      
         
         int num1 = Integer.parseInt(str[0]); 
         int num2 = Integer.parseInt(str[1]);
         
         int result1 = num1 / num2;
         System.out.println("연산의 결과: " + result1);
      } 
      
      catch(ArithmeticException e) {
         System.out.println(e.getMessage());
         e.printStackTrace(); 
      } 
      
      catch(Exception e) {
         e.printStackTrace();  
      } 
      
      finally {
		System.out.println("두근두근!");
      }

   }

}

2.예외가 발생한 메소드에서 처리하지 않기

예외가 발생한 메소드에서 예외를 처리하지 않으면

  • 일반적인 방법으로 프로그램이 종료하거나
  • throws Exception을 통해 호출한 메소드의 try~catch 구문을 활용하는 방법

이 있다.

2-1. 다른 메소드로 전가하기

다른 메소드로 전가하는 것은 호출관계에 있는 경우에서 활용가능하다.(아직 상속관계와 예외처리는 학습하지 못함...!)

메소드1에서 메소드2를 호출하여 사용하는 경우
호출된 라인에 try를 걸어 메소드2에서 예외가 발생할 가능성을 대비한다.
또한 메소드1에 catch구문을 넣고, 메소드2에는 throws Exception 조건을 내걸어, 예외발생 시 호출된 구절로 돌아간다. 그리고 마주하는 catch를 통해 예외처리를 수행한다.

그러나 try~catch 구문이 없는 경우에는 예외가 발생하게된다.

2-2. JVM으로 전가하기

그러나 메소드1과 메소드2 모두 try~catch구문을 가지고있지않다면 예외가 발생한다. 이는 JVM으로 예외가 전가되어 결국 예외발생에 이르게되는 것이다.


4. finally

발생해야할 문장은 반드시 발생하도록하는구문이다.
예외가 발생하더라도 발생하도록하는 것인데, 일반적으로 메모리 누수가 발생할수있는 라이브러리를 종료하는데 사용한다.

간단한 예는 다음과 같다.

Scanner keyin = new Scanner(System.in);
...
finally{
keyin.close();
}

5. 예외처리에 사용되는 함수

Exception e 일때,

  1. e.getMessage() : 생성된 예외 메세지를 출력한다.

Exception은 클래스로 다음과 같이 생성된다.
생성시 입력된 예외메시지는 e.getMessage()를 통해 출력될 수 있다.

throw new Exception(예외메세지 입력)

  1. e.printStackTrace() : 해당 예외가 발생한 경로를 추적하여 알려준다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN