예외 처리 (Exception Handling)

Yunsung·2025년 1월 2일
post-thumbnail

개발을 하면서 반드시 마주하게 되는 문제 중 하나는 다양한 형태의 에러와 예외입니다. 이 글에서는 자바의 예외 처리에 대해 개념부터 예제까지 다뤄보겠습니다!😊


우선 에러와 예외의 차이점에대해 알아야합니다.

에러와 예외의 구분

에러(Error)

  • 프로그램 코드로는 복구할 수 없는 심각한 오류.
  • 예: OutOfMemoryError, StackOverflowError

예외(Exception)

  • 프로그램 코드로 수습이 가능한 오류.
  • 예: NullPointerException, ArrayIndexOutOfBoundsException

예외 처리의 정의와 목적

정의

프로그램 실행 중 발생할 수 있는 예외 상황에 대비하여 코드로 이를 처리하는 방식.

목적

  • 프로그램의 비정상 종료 방지
  • 정상적인 실행 상태를 유지

예외의 종류

  1. 컴파일 시점의 예외 (Checked Exception)
  • 컴파일 단계에서 반드시 예외 처리 코드가 있어야 함.
  • 예: IOException, SQLException
  1. 런타임 시점의 예외 (Unchecked Exception)
  • 실행 중에 발생하며, 컴파일 단계에서는 처리 강제가 없음.
  • 예: NullPointerException, ArrayIndexOutOfBoundsException

예외 처리 구문 형식

기본 형식 (try-catch-finally)

try {
    // 예외가 발생할 가능성이 있는 코드
} catch (예외_클래스 e) {
    // 예외 발생 시 처리할 코드
} finally {
    // 예외 발생 여부와 상관없이 항상 실행되는 코드
}

예제: 배열 인덱스 예외 처리

public class ExceptionExample {
    public static void main(String[] args) {
        String[] languages = {"Java", "Python", "C++"};

        try {
            for (int i = 0; i <= languages.length; i++) {
                System.out.println(languages[i]);
            }
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
            System.out.println("배열 인덱스 초과 예외가 발생했습니다.");
        } finally {
            System.out.println("예외 발생 여부와 상관없이 실행되는 블록입니다.");
        }
    }
}

직접 예외 처리 vs 간접 예외 처리

  1. 직접 예외 처리 (try-catch)
    메서드 내에서 예외를 처리.

  2. 간접 예외 처리 (throws)
    메서드 선언부에 throws 키워드를 사용해 호출한 쪽으로 예외를 전달.

public class ExceptionDemo {
    public String getInput() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        return br.readLine();
    }
}

public class Main {
    public static void main(String[] args) {
        ExceptionDemo demo = new ExceptionDemo();

        try {
            String input = demo.getInput();
            System.out.println("입력한 값: " + input);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

예외 강제 발생 (throw)

특정 상황에서 의도적으로 예외를 발생시키려면 throw 키워드를 사용합니다.

public void validateNumber(int number) throws Exception {
	if (number < 0) {
    	throw new Exception("음수는 허용되지 않습니다.");
    }
}
profile
풀스택 개발자로서의 도전을 하는 중입니다. 많은 응원 부탁드립니다!!😁

0개의 댓글