ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 예외처리 (try - catch문)와 예외 발생시키기
    JAVA/예외처리 2023. 7. 28. 13:38

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

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

     

    에러는 발생하면 복구하기 힘든 심각한 오류이고, 예외는 발생하더라도 수습될 수 있는 비교적 덜 심각한 상황이다.

     

    자바의 예외 클래스의 계층구조는 다음과 같다.

     

    예외를 크게 분류하면 Exception 클래스와 그의 자손들 / RuntimeException 클래스와 그의 자손들로 분류할 수 있다. 모든 예외의 최고 조상은 Exception 클래스이다.

     

     

    예외 처리 방법 (try-catch)

    public class Main {
        public static void main(String[] args) {
            int num = 10;
            int result = 0;
    
            for (int i = 20; i < 10; i++) {
                result = num / (int) (Math.random() * 10);
                System.out.println(result);
            }
        }
    }

    위와 같은 코드는 오류가 발생하는데, 어떤 수를 0으로 나눌 수 없기 때문에 숫자들이 출력되다가 Math.random()의 수가 0이 되는 구간에서 num / 0이 되어서 ArithmeticException 예외가 발생한다.

     

     

    try-catch문 사용

    public class Main {
        public static void main(String[] args) {
            int num = 10;
            int result = 0;
    
            for (int i = 20; i < 10; i++) {
                try {
                    result = num / (int) (Math.random() * 10);
                    System.out.println(result);
                } catch (ArithmeticException e) {
                    System.out.println("0");
                }
            }
        }
    }

    예외가 발생하는 코드를 try로 감싸고 그 뒤에 catch를 사용하면 예외처리를 할 수 있다.

    만약에 try 구문 안에서 예외가 발생하면 catch문을 돌며 해당되는 예외가 있다면 그 catch문 안에 있는 내용을 실행시켜주고, 그렇지 않다면 예외가 처리 되지 않는다.

    모든 예외의 부모는 Exception이기 때문에 Exception을 통해서도 예외처리를 할 수 있고, Exception과 ArithmeticException이 둘 다 있다면 더 세부적인 ArithmeticException이 있는 catch 구문이 실행된다.

     

     

    finally 블럭

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

     

    예외가 발생한 경우에는 try - catch - finally 순으로 진행된다.

    예외가 발생하지 않은 경우에는 try - finally 순으로 진행된다.

    try {
        // 예외가 발생한 가능성이 있는 문장을 넣는다.
    } catch (Exception e) {
        // 예외처리를 위한 문장을 적는다.
    } finally {
        // 예외의 발생 여부에 관계없이 항상 수행되어야 하는 문장을 적는다.
        // try - catch문의 맨 마지막에 finally 블럭이 들어가야 한다.
    }

     

     

     

     

    예외 발생시키기

    public class Main {
        public static void main(String[] args) {
            try {
                Exception e = new Exception("예외를 고의로 발생시키기");
                throw e;
            } catch (Exception e) {
                System.out.println("에러 메시지 : " + e.getMessage());
                e.printStackTrace();
            }
            System.out.println("정상 종료");
        }
    }

    위처럼 프로그래머가 고의로 예외를 발생시킬 수도 있다. 고의로 예외를 발생시키고 String을 넣어서 예외를 발생시킨 것이다. 만약에 예외를 직접 사용하고 싶을 때에는 예외를 생성자로 만든 다음에 키워드 throw를 통해서 예외를 발생시키면 된다.

    물론 직접 만든 예외여도 예외이기 때문에 try-catch문으로 잡아주지 않는다면 예외가 발생해서 컴파일이 완료되지 않는다.

     

     

     

    참고

    printStackTrace() : 예외발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메시지를 화면에 출력해준다.

    getMassage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.

    'JAVA > 예외처리' 카테고리의 다른 글

    메서드에 예외 선언 (throws로 예외 던지기)  (0) 2023.07.28
Designed by Tistory.