예외처리 TIP

    팁 작성에 앞서, 개념을 알기는 하지만 놓칠 수 있는 부분들이나 다시 한 번 복기하면 좋을만 한 것들을 정리해둔 것이기 때문에

    처음 공부하시는 분들에게는 적절하지 않을 있습니다.

     

     예외처리 TIP

     

    *Error vs Exception

    • 에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류

         → 컴파일 에러, 런타임 에러, 논리적 에러

    • 예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

     

    *RuntimeException 클래스 및 서브 클래스들

    프로로그래머의 실수로 발생하는 예외

     

    *예외처리의 목적

    의도하지 않은 실행 및 비정상 종료를 막고 정상적인 실행 상태를 유지하는 것

     

    *예외처리 구문 : try-catch 구문

    try {

     

    } catch (Exception1 e1) {

    e1.printStackTrace();

    } catch (Exception2 e2) {

    e2.printStackTrace();

    } finally {

     

    }

    → 단, 1개의 catch 블럭만 수행하며 그 뒤의 블럭은 확인되지 않는다.

    → instanceof 연산자를 이용하여 예외와 일치하는 catch 블럭을 만날 때까지 검사를 진행하고 없다면 예외는 처리되지 못한다.

    → 문장이 하나뿐이어도 괄호는 생략할 수 없다.

     

    *catch 블럭 괄호()에 Exception class 타입의 참조변수를 선언해 놓으면 모든 예외를 처리할 수 있다.

     

    *Error message

    1) printStackTrace() : 호출 스택에 있던 메서드의 정보와 예외 메시지를 화면에 출력

    2) getMessage() : 발생한 예외 클래스의 인스턴스에 저장된 메시지를 반환

     

    *여러 종류의 예외를 하나의 catch 블럭에서 처리 하는 법(JDK 1.7부터 가능)

    Ex> catch(ExceptionA | ExceptionB e) { }

    → catch 블럭 내의 예외들이 super/sub 관계에 있다면 비효율적인 코드이기 때문에 에러가 발생한다.

    → ‘|’ 기호로 연결할 수 있는 예외 클래스의 개수에는 제한이 없다.

     

    *사용자 정의 Exception 발생 시키는 법(키워드 : throw)

     

    try {

    Exception e1 = new Exception("Error message");

    throw e1;

     

    } catch (Exception e1) {

    System.out.println(e1.getMessage());

    }

    → 아예 클래스를 생성하여 사용해도 된다.

     

    *RuntimeException 의 경우, 프로그래머의 실수로 발생한 것이기 때문에 예외처리를 강제하지 않는다. 컴파일이 되기는 한다.

     

    *메서드에 예외 선언(키워드 : throws)

    Ex> void method() throws ExceptionA, ExceptionB, …, ExceptionN { }

    → 메서드 사용 시 예외처리를 강제시킨다.

     

    *finally block

    예외의 발생 여부와 상관없이 실행되는 코드 블럭

    → try block 내에 리턴문과 같이 구문을 빠져나가는 경우에도 finally block은 실행된다. 단, 프로그램 종료문(exit())을 만날 경우는 실행되지 않는다.

     

    *Checked/Unchecked Exception

    • Checked : RuntimeException 을 상속받지 않는 예외 클래스 

         → 반드시 예외처리를 해주어야 한다.

    • Unchecked : RuntimeException 을 상속받는 클래스

     

    *Exception re-throwing

    예외를 발생한 메서드에서 처리한 후 throw문을 통해 인위적으로 발생시켜 호출한 메서드에서 한 번 더 처리하도록 하는 것

     

    *Chained Exception

    예외 A가 예외 B를 발생시킨 경우, A를 B의 원인 예외(Cause Exception)이라고 한다.

    원인 예외 등록 선언 : .initCause(e);

    원인 예외 반환 : .getCause();

    → 원인 예외를 등록하는 이유

    1. 여러가지 예외를 큰 분류의 예외로 묶어서 다루기 위함
    2. Checked 예외를 Unchecked 예외로 바꿀 수 있도록 하기 위함

    Ex>

    throw new TestException(“msg”);

    → throw new RuntimeException(new TestException(“msg”));

     

    반응형

    'Java > Grammar' 카테고리의 다른 글

    객체지향언어 TIP (2)  (1) 2022.11.30
    객체지향언어 TIP (1)  (0) 2022.11.14
    배열 TIP  (0) 2022.11.04
    조건문 & 반복문 TIP  (0) 2022.10.24
    연산자 TIP  (0) 2022.10.24

    댓글