ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 9주차 과제 : 자바의 예외 처리
    Java/온라인 자바 스터디 2021. 1. 17. 17:54
    반응형

    목표

    자바의 예외 처리에 대해 학습하세요.


    학습할 것 (필수)

    자바에서 예외 처리 방법 (try, catch, throw, throws, finally)

    자바가 제공하는 예외 계층 구조

    Exception과 Error의 차이는?

    RuntimeException과 RE가 아닌 것의 차이는?

    커스텀한 예외 만드는 방법


    자바에서 예외 처리 방법 (try, catch, throw, throws, finally)

    try-catch

    예외를 처리하기 위해서는 try-catch문을 사용하며, 그 구조는 다음과 같다.

    try {

    // 예외가 발생할 가능성이 있는 문장들을 넣는다.

    } catch (Exception1 e1){

    // Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.

    } catch (Exception2 e2){

    // Exception2이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.

    } catch (ExceptionN eN){

    // ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.

    }

    하나의 try블럭 다음에는 여러 종류의 예외를 처리할 수 있도록 하나 이상의  catch블럭이 올 수 있으며, 이 중 발생한 예외의 종류와 일치하는 단 한 개의 catch블럭만 수행한다. 발생한 예외의 종류와 일치하는 catch블럭이 없으면 예외는 처리되지 않다.


    try-catch문에서의 흐름

    try블럭 내에서 예외가 발생한 경우

    1.발생한 예외와 일치하는 catch블럭이 있는지 확인한다.

    2.일치하는 catch블럭을 찾게 되면, 그 catch블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행한다. 만일 일치하는 catch블럭을 찾지 못하면, 예외는 처리되지 못한다.

    try블럭 내에서 예외가 발생하지 않은 경우

    1.catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.


    throw

    키워드 throw를 사용해서 프로그래머가 고의로 예외를 발생시킬 수 있으며, 방법은 아래의 순서를 따르면 된다.

    1.먼저, 연산자 new를 이용해서 발생시키는 예외 클래스의 객체를 만든 다음

    Exception e = new Exception("고의로 예외를 발생");

    2.키워드 throw를 이용해서 예외를 발생시킨다.

    throw e;


    throws

    예외를 처리하는 방법에는 try-catch문을 사용하는 것 이외에, 예외를 메서드에 선언하는 방법이 있다.

    메서드에 예외를 선언하려면, 메서드의 선언부에 키워드 throws를 사용해서 메서드 내에서 발생할 수 있는 예외를 적어주기만 하면 된다.

    그리고, 예외가 여러 개일 경우에는 쉼표(,)로 구분한다.

    void method() throws Exception1, Exception2, .... ExceptionN {

    // 메서드의 내용

    }


    finally

    finally블럭은 try-catch문과 함께 예외의 발생여부에 상관없이 실행되어야할 코드를 포함시킬 목적으로 사용된다.

    try-catch문의 끝에 선택적으로 덧붙여 사용할 수 있으며, try-catch-finally의 순서로 구성된다.

    try {

    // 예외가 발생할 가능성이 있는 문장들을 넣는다.

    } catch (Exception e) {

    // 예외처리를 위한 문장을 적는다.

    } finally {

    // 예외의 발생여부에 관계없이 항상 수행되어야하는 문장들을 넣는다.

    // finally블럭은 try-catch문의 맨 마지막에 위치해야한다.

    }

    예외가 발생한 경우에는 'try -> catch -> finally'의 순으로 실행되고, 예외가 발생하지 않은 경우에는 'try -> finally'의 순으로 실행된다.


    자바가 제공하는 예외 계층 구조

    자바에서는 실행 시 발생할 수 있는 오류(Exception과 Error)를 클래스로 정의하였다. 모든 클래스의 조상은 Object클래스이므로 Exception과 Error클래스 역시 Object클래스의 자손들이다.


    예외클래스 계층도


    RuntimeException과 RE가 아닌 것의 차이는?

    RuntimeException클래스와 그 자손클래스들(아랫부분)

    RuntimeException클래스가 아닌 그 자손클래스(윗부분)

    RuntimeException클래스와 RuntimeException클래스가 아닌 클래스 중심의 상속계층도


    RuntimeException클래스들 - 프로그래머의 실수로 발생하는 예외

    RuntimeException클래스가 아닌 클래스들  - 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외가


    RuntimeException클래스들과 RuntimeException클래스가 아닌 클래스들의 중요한 차이점은 컴파일시의 예외처리 체크여부이다. 

    RuntimeException클래스들 그룹에 속하는 예외가 발생할 가능성이 있는 코드에는 예외 처리를 해주지 않아도 컴파일 시에 문제가 되지 않지만, RuntimeException클래스가 아닌 클래스들 그룹에 속하는 예외가 발생할 가능성이 있는 예외는 반드시 처리를 해주어야 하며, 그렇지 않으면 컴파일 시에 에러가 발생한다.


    커스텀한 예외 만드는 방법

    Exception클래스로부터 상속받아서 커스텀한 예외 클래스를 만들 수 있다.

    class CustomException extends Exception {

    CustomException(String msg){ // 문자열을 매개변수로 받는 생성자

    super(msg); // 조상인 Exception클래스의 생성자를 호출된다.

    }

    }

    출처 : 자바의 정석


    참조 : https://github.com/whiteship/live-study/issues/9

    반응형

    댓글

Designed by Tistory.