[Java] 예외처리 기본 처리 방법

이준영·2023년 8월 18일
0

🟫 Java

목록 보기
6/21
post-thumbnail

🟫 Java의 Exception

자바에서 말하는 예외 처리란 프로그래머가 기대하고 작성한 기능대로 작동하지 않고 예상치 못하게 프로그램이 동작하는 것을 의미합니다.

자바는 예외가 발생하면 실행중이던 코드를 중단하고 해당 예외를 먼저 처리하게 됩니다. 이러한 예외들은 아주 다양하게 존재합니다.

아주 간단한 예시로 배열의 크기를 넘어가는 인덱스를 참조하거나(ArrayIndexOutOfBoundsException), 나누기를 할 때 0으로 나누는 경우 등이 있습니다(ArithmeticException).

이 외에도 수많은 예외가 존재하는데, 이러한 예외 클래스들은 공통적으로 최상위 부모로 (Object 클래스 제외) Throwable 이라는 클래스를 상속받고 있습니다.

💡 Throwable 클래스의 메소드

public String getMessage(): 예외의 원인을 담고 있는 문자열을 반환

public void printStackTrace(): 예외가 발생된 위치와 호출된 메소드들의 정보를 출력



🟫 Java의 Exception 처리 방법

자바에서 Exception이 발생 가능한 경우에는 두가지 행동을 취할 수 있습니다.

  1. 직접 예외를 처리하기 - try, catch 문 사용
  2. 호출 했던 메소드에 넘기기 - throws 사용
class IOExceptionCase { 
    public static void main(String[] args) {
        try {
            method1();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        //... 다음 코드 이어서 실행
    }
    public static void method1() throws IOException {
        method2();
    }    
    public static void method2() throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String a = br.readLine(); // IOException 발생 가능
    }
}

위와같은 코드의 예시에서 BufferedReader를 통해 readLine()을 하는 부분에서 IOException이 발생할 가능성이 있어 해당 예외를 처리하고 있습니다.

우선 , br.readLine()에서 예외가 발생했다고 가정하면, 해당 라인은 try문으로 감싸져 있지 않아 예외를 직접 처리할 수 없어 throws로 해당 메소드(method2)를 호출했던 곳으로 예외를 넘기게 됩니다.
method1 에서 해당 method2를 호출하고 있기 때문에 해당 라인이 또한 예외처리를 해야하는데 try문에 감싸져있지 않기 때문에 역시 method1을 호출했던 main으로 예외 처리를 떠넘기게 됩니다. 이후 main에서 try,catch 문을 통해 예외를 처리하고 남은 코드를 이어 처리하는 순서로 흘러가게 됩니다.

💡 만약 맨처음 호출되는 main 메소드에서도 예외를 throws를 통해 밖으로 넘기면 어떻게 될까요??

main 에서도 throws로 예외를 넘기게 만들었다면, main은 이전에 호출된 메소드가 없어 JVM에게 예외처리를 넘기게 되고, JVM은 printStackTrace() 메소드를 호출시키고 프로그램을 종료시킵니다.


정리하자면, 예외를 처리하려면 try문으로 감싸 직접 처리하거나, throws를 통해 호출되었던 메소드에게 책임을 넘기거나, 둘 중 하나를 통해 예외를 처리해야 합니다.

profile
작은 걸음이라도 꾸준히

0개의 댓글