Error
- Error는 주로 시스템 레벨에서 발생하며, 개발자가 직접 제어할 수 없는 문제를 나타낸다.
- 주로 런타임 시 발생하며, 프로세스에 심각한 문제를 야기할 수 있어 프로세스를 종료시킬 수 있다.
- 대표적인 예로 'OutOfMemoryError'가 있으며, 이는 JVM 메모리 한계를 초과하거나, 너무 많은 클래스를 로드하거나, 메모리 부족 등과 관련된다.
- 시스템 관리자나 개발자가 개입하여 해결해야 하며, 프로그램 코드 내에서 예방하거나 처리하기 어렵다.
Exception
- Exception은 주로 개발자가 작성한 프로그램 코드에서 발생하는 예상하지 못한 상황 또는 오류를 나타낸다.
- 프로그램의 실행 중에 발생할 수 있으며, 프로세스를 강제로 종료하지는 않지만 프로그램의 정상적인 흐름을 방해할 수 있다.
- 대부분의 Exception은 개발자가 적절한 예외 처리 코드를 작성하여 처리할 수 있다.
Exception 종류
- Checked Exception
- 컴파일 시 예외 처리가 필수로 요구되는 예외로, 예외 발생 시 처리하지 않으면 컴파일 오류가 발생한다.
- 주로 외부 리소스와의 상호작용(파일 I/O, 네트워크 통신 등)에서 발생한다. (RuntimeException 이외의 모든 예외)
- ex) IOException, SQLEXception, etc.
- ex) IOException, SQLEXception, etc.
- Unchecked Exception
- 컴파일 시 체크되지 않고, 런타임에 발생하는 예외를 말한다.
- RuntimeException 클래스와 그 하위 예외들이 여기에 속한다.
- ex) NullPointerException, IndexOutOfBoundException, etc.
Java 예외와 오류 처리
Throwable 클래스
Throwable 클래스는 모든 Error와 Exception의 최상위 클래스로서 자바에서는 다음과 같이 정의되어 있다.
public class Throwable extends Object implements Serializable {
// ...
}
Throwable 클래스는 java.lang 패키지에 속하며 Object 클래스를 상속받는다. Serializable 인터페이스를 구현하므로 객체 직렬화에 사용될 수도 있다.
Throwable 클래스의 주요 메서드
1. getMessage() : Throwable 객체에 저장된 메시지를 반환한다. 이 메시지는 예외 또는 오류 객체를 생성할 때 생성자를 통해 설정할 수 있다.
2. printStackTrace() : 예외 또는 오류 객체가 발생한 위치와 스택 트레이스 정보를 표준 오류 스트림에 출력한다. 이를 통해 오류를 디버깅할 때 유용하게 사용된다.
3. getStackTrace() : 현재 스택 트레이스 정보를 스택 트레이스 요소 배열로 반환한다. 이 배열은 스택 트레이스의 각 요소에 대한 정보를 포함한다.
Exception Handling
1. try-catch 구문
예외가 발생할 가능성이 있는 코드를 'try' 블록으로 묶고, 예외가 발생했을 때 처리할 코드를 'catch' 블록에 작성하는 방식
- catch 구문은 else if 처럼 여러 개 쓸 수 있다.
- finally는 마지막에 실행하고 싶은 로직이 들어가며, 대표적으로 .close()가 있다.
try {
// 예외가 발생할 수 있는 코드
int result = divide(10, 0);
} catch (ArithmeticException e) {
// 예외가 발생했을 때 처리할 코드
System.out.println("0으로 나눌 수 없습니다.");
}
2. throws 구문
예외를 현재 메서드에서 직접 처리하지 않고, 호출한 메서드로 예외를 던지는 방식
- 호출한 메서드에서 예외를 처리하거나, 더 상위 메서드로 전파
- throws 예외 선언은 메서드 시그니처에 포함되며, 해당 메서드에서 발생할 수 있는 예외를 명시한다.
public void myMethod() throws CustomException {
// 예외가 발생할 수 있는 코드
if (someCondition) {
throw new CustomException("예외 상황 발생");
}
}
[참고] https://gyoogle.dev/blog/computer-language/Java/Error%20&%20Exception.html
'Languages > Java' 카테고리의 다른 글
[Java] 컴포지션 (Composition) (0) | 2023.09.14 |
---|---|
[Java] Stream API (0) | 2023.09.14 |
[Java] Garbage Collection (0) | 2023.09.06 |
[Java] JVM (Java Virtual Machine) (0) | 2023.09.06 |
[Java] 고유 락 (Intrinsic Lock) (0) | 2023.08.31 |