예외 처리 (Exception Handling)
예외의 종류 (Types of Exceptions)
Java에서 예외는 크게 두 가지로 나뉩니다:
- Checked Exception (확인된 예외):
- 컴파일 시점에서 확인되는 예외로, 반드시 예외 처리를 해야 합니다.
IOException
,SQLException
등이 이에 해당합니다.
- Unchecked Exception (미확인 예외 또는 런타임 예외):
- 컴파일러가 예외 처리 여부를 확인하지 않습니다.
NullPointerException
,ArrayIndexOutOfBoundsException
,ArithmeticException
등이 이에 해당합니다.
try-catch 블록 (try-catch Block)
Java에서 예외 처리는 try
, catch
, finally
블록을 사용하여 합니다. try
블록 내에서 예외가 발생할 수 있는 코드를 작성하고, 예외가 발생하면 catch
블록에서 처리합니다. finally
블록은 예외 발생 여부와 관계없이 항상 실행되는 코드를 작성할 때 사용됩니다.
try-catch 블록 예제:
public class Main { public static void main(String[] args) { try { int[] numbers = {1, 2, 3}; System.out.println(numbers[4]); // ArrayIndexOutOfBoundsException 발생 } catch (ArrayIndexOutOfBoundsException e) { System.out.println("배열 인덱스를 초과했습니다."); } } }
위의 예제에서 try
블록 내에서 배열의 인덱스를 초과하는 접근을 시도하고 있습니다. 이 때 ArrayIndexOutOfBoundsException
이 발생하므로 catch
블록에서 예외를 잡아 처리합니다.
사용자 정의 예외 (Custom Exceptions)
사용자 정의 예외는 기존의 예외 클래스를 확장하여 새로운 예외 클래스를 만드는 것을 말합니다. 주로 특정 애플리케이션에서 발생할 수 있는 독자적인 예외 상황을 처리할 때 사용됩니다.
사용자 정의 예외 예제:
// 사용자 정의 예외 클래스 class MyCustomException extends Exception { public MyCustomException(String message) { super(message); } } // 예외 발생하는 메서드 class MyClass { void validateAge(int age) throws MyCustomException { if (age < 18) { throw new MyCustomException("미성년자는 이 작업을 수행할 수 없습니다."); } else { System.out.println("성인으로 인정됩니다."); } } } // 사용 예제 public class Main { public static void main(String[] args) { MyClass obj = new MyClass(); try { obj.validateAge(15); // MyCustomException 발생 } catch (MyCustomException e) { System.out.println("예외 발생: " + e.getMessage()); } } }
위의 예제에서 MyCustomException
클래스는 Exception
클래스를 상속하여 사용자 정의 예외를 정의합니다. MyClass
에서는 validateAge()
메서드에서 나이가 18세 미만이면 MyCustomException
을 발생시킵니다. Main
클래스에서는 이 예외를 catch
블록에서 잡아 처리하고 있습니다.