자바 예외 처리 (Exception Handling)
예외(Exception)란 프로그램 실행 중 예상치 못한 오류가 발생하는 상황을 의미합니다. 자바는 이러한 오류를 관리하고 처리하기 위한 예외 처리 메커니즘을 제공합니다. 예외 처리는 프로그램에서 문제가 발생할 가능성이 있는 부분을 미리 예측하여, "문제가 발생하면 이렇게 처리하라"라고 명시하는 프로그래밍 방식입니다.
예외의 종류
자바에서 예외는 크게 두 가지로 나뉩니다:
컴파일러 체크 예외(Checked Exception):
- 컴파일 과정에서 발생할 수 있는 예외로, 예외 처리 코드를 반드시 포함해야 합니다.
- 예외 처리 코드가 없다면 컴파일 오류가 발생합니다.
- 예:
IOException
,SQLException
등.
실행 예외(Unchecked Exception):
- 프로그램 실행 중에 발생하는 예외로, 컴파일러가 예외 처리 코드를 강제하지 않습니다.
- 예외 처리 코드가 없더라도 컴파일은 성공하지만, 실행 중에 문제가 발생하면 프로그램이 비정상 종료될 수 있습니다.
- 예:
NullPointerException
,ArrayIndexOutOfBoundsException
,NumberFormatException
등.
자주 발생하는 실행 예외
NullPointerException:
- 객체가 참조되지 않은 상태에서(
null
) 해당 객체에 접근하려고 할 때 발생합니다. - 예:
null
값을 갖는 객체에 메서드 호출이나 필드 접근을 시도할 때.
- 객체가 참조되지 않은 상태에서(
ArrayIndexOutOfBoundsException:
- 배열의 유효한 인덱스 범위를 벗어난 값을 사용할 경우 발생합니다.
- 예: 배열 크기가 5인 경우
arr[5]
에 접근 시.
NumberFormatException:
- 문자열을 숫자로 변환할 때, 변환할 수 없는 형식의 문자열을 사용할 경우 발생합니다.
- 예:
"abc"
를Integer.parseInt()
로 변환하려 할 때.
ClassCastException:
- 잘못된 형 변환이 발생할 때 발생합니다.
- 부모 클래스와 자식 클래스 간의 형 변환만 가능하며, 이외의 경우에는 발생합니다.
예외 처리 구문
자바에서는 try-catch-finally 구문을 통해 예외를 처리할 수 있습니다.
try {
// 예외가 발생할 수 있는 코드
} catch (예외클래스명 변수명) {
// 예외 처리 코드
} finally {
// 예외 발생 여부와 상관없이 항상 실행할 코드
}
try
블록에서 예외가 발생하면 해당 예외에 맞는catch
블록이 실행됩니다.finally
블록은 예외 발생 여부와 상관없이 항상 실행됩니다. 자원 해제 등 반드시 실행해야 하는 코드가 있을 때 사용합니다.
예시
try {
int[] arr = new int[5];
System.out.println(arr[5]); // ArrayIndexOutOfBoundsException 발생
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열의 인덱스 범위를 초과했습니다.");
} finally {
System.out.println("이 코드는 항상 실행됩니다.");
}
throw
키워드
throw
키워드를 사용하여 개발자가 명시적으로 예외를 발생시킬 수 있습니다. 잘못된 값이 입력되거나, 특정 조건에서 프로그램을 강제로 종료해야 할 때 사용됩니다.
if (value < 0) {
throw new IllegalArgumentException("값은 0보다 작을 수 없습니다.");
}
가비지 컬렉션 (Garbage Collection)
자바에서 객체를 생성할 때는 new
키워드를 사용하지만, 생성된 객체를 메모리에서 해제하는 키워드는 존재하지 않습니다. 이는 자바 가상 머신(JVM)이 자동으로 메모리를 관리하기 때문입니다. 이러한 메모리 관리 메커니즘을 가비지 컬렉션(Garbage Collection, GC)이라고 합니다.
가비지 컬렉터의 역할
가비지 컬렉터는 더 이상 참조되지 않는 객체를 메모리에서 자동으로 해제하는 역할을 합니다. 이를 통해 개발자는 명시적으로 메모리를 해제하는 부담을 덜 수 있습니다. 자바는 메모리 누수를 방지하고, 메모리 관리의 복잡성을 줄여주는 자동 메모리 관리를 통해 안정적인 프로그램을 개발할 수 있게 해줍니다.
가비지 컬렉션이 필요한 이유
프로그램이 실행되는 동안 객체는 지속적으로 생성됩니다. 하지만 모든 객체가 프로그램의 종료까지 필요한 것은 아닙니다. 더 이상 사용되지 않는 객체가 메모리에 남아 있으면 메모리 누수가 발생하여, 결국 프로그램의 성능을 저하시킬 수 있습니다. 가비지 컬렉터는 이러한 객체들을 자동으로 정리함으로써 메모리 공간을 효율적으로 관리합니다.
'🗄️ Backend > Java' 카테고리의 다른 글
익명 객체와 람다식: 자바에서의 활용 (3) | 2024.10.10 |
---|---|
Java API : 주요 클래스 및 I/O 스트림 사용법 (3) | 2024.10.10 |
JAVA 패키지와 객체지향 개념 정리 (0) | 2024.10.10 |
JAVA 메서드와 객체지향 프로그래밍 (0) | 2024.10.10 |
JAVA 배열과 제어문(반복문) 정리 (0) | 2024.10.10 |