Programing/JAVA

Java Exception 처리 예외 처리 try catch 알짜만 빼먹기

리커니 2019. 7. 11.
반응형

Java Exception Handler 예외 처리 try catch 알짜만 빼먹기

예외 처리 방법을 알아보기에 앞서,

예외는 뭐고 왜 처리 해야 하는지에 대해 알아보도록 하겠습니다.

 

예외(Exception) 이란 프로그램 코드를 수정하여 수습할 수 있는 다소 미약한 오류를 말합니다.

하지만 이런 예외를 간과했다간 프로그램이 다운될 수 도 있죠.

그래서 우리는 예외처리(Exception Handling)를 하여, 프로그램이 정상실행상태를 유지하도록 해야합니다.

 

예외처리(Exception Handling)란 위에서 말한 프로그램을 다운시킬 수도 있는 다소 미약한 오류들을 JVM (Java Virtual Machine) 에게 알려주는 방법입니다.

그리고 Java 에서는 이 예외처리를 하기 위해 try ... catch 문을 활용하죠.

 

기본적인 try ... catch 구문을 보도록 하겠습니다.

 

try{
    //예외가 발생한 가능성이 있는 코드
}catch(Excetion e){
    //예외 발생시 처리할 코드
}finally{
    //예외가 발생하든 말든 처리할 코드
}

 

간단 하죠. 예외가 발생할 것 같은 코드를 try 중괄호 안에,

발생하면 처리할 코드를 catch 중괄호 안에,

발생을 하든 안하든 처리해야 될 것이 있다면 finally 중괄호 안에 넣으시면 됩니다.

※ try나 catch 문 내에 return 값이 있어도 finally구분은 실행되니 주의하세요!

 

강제로 Exception 을 발생하는 것도 가능합니다.

new 연산자를 이용해 Exception 객체를 만든 후 throw 키워드를 사용하는 방법입니다.

예를 보도록 하죠.

 

try{
    NullPointerException ne = new NullPointerException();
    throw ne;
}catch(NullPointerException e1){
    System.out.println(e1);
}catch(Exception e2){
    System.out.println(e2);
}

 

java.lang.NullPointerException 발생.

위처럼 catch 를 멀티로 사용할 경우에는 가장 위쪽 부터 아래로 가게 됩니다.

그러니 처음 NullPointerException 을 먼저, Exception 을 그 후에 타게되죠.

그리고 catch 문에 한번 걸리게 되면 다음 으로 가지 않습니다. 위의 코드를 보시면 강제로 NullpointerException을 발생시켰으니 처음 catch 문에 걸리고 다음 Exception catch문은 타지 않습니다.

 

두가지 Exception 에 대해서 한 가지 처리만 하는 것도 가능합니다.

 

try{
    String[] strArr = new String[10];
    String str = strArr[10];
}catch(NullPointerException | ArrayIndexOutOfBoundsException e1){
    System.out.println(e1);
}catch(Exception e2){
    System.out.println(e2);
}

 

처음 catch 문에서 NullPointerException과 ArrayIndexOutOfBoundsException 을 '|' 로 선언했습니다.

그리고 try 문에서 10자리 배열을 생성하고 범위를 넘어가는 배열의 값에 접근했죠.

java.lang.ArrayIndexOutOfBoundsException: 10 이 발생하게 됩니다.

그래서 처음 catch 문에서 처리되게 되죠.

 

try ... catch 문 내에 try ... catch 문도 사용할 수 있습니다.

 

try{
    try{
        String a = "여기는 그냥 통과";
    }catch(Exception se1){
        LOGGER.error("1번 로직 exception 발생");
    }
    try{
        NullPointerException ne = new NullPointerException();
        throw ne;
    }catch(Exception se2){
        LOGGER.error("2번 로직 exception 발생");
        throw se2;    
    }
}catch(Exception e){
    System.out.println(e);
}

 

1번 로직은 Exception 이 발생해도 전체 로직에 영향을 끼치지 않아

그냥 로그만 찍어 확인해도 상관이 없고

2번 로직은 크리티컬이라 Exception 처리를 해야 한다 할때 위와 같이 예외처리를 할 수 있습니다.

 

메서드에 예외를 선언할 수 도 있는데요,

이건 호출한 메서드로 예외를 전달 해서 처리 해야 할 때 사용합니다.

 

class exception{
    public static void main(String[] args) throw Exception{
        method1();
    }

    static void method1() throws Exception{
        method2();
    }

    static void method2() throws Exception{
        throw new Exception();
    }
}

 

main 메소드가 method1을 호출하고 method1은 method2를 호출하죠.

그런데 method2에서 Exception이 발생합니다. 그럼 method1이 받고 그걸 main 메소드로 전달하죠.

Exception in thread "main" java.lang.Exception

 

예외처리는 간단해 보이지만 정말 중요하고 어려운 부분중에 하나입니다.

로직을 모두 파악하고 예외가 발생할 만한 코드를 예측 해야하죠. 경험에 의한 감도 필요합니다.

 

프로그램이 죽는 날이 오지 않도록 모두 예외처리 잘 해봅시닷~!

반응형

댓글

💲 추천 글