1. 자바에서 예외 처리 방법 (try, catch, throw, throws, finally)
2. 자바가 제공하는 예외 계층 구조
3. Exception과 Error 차이
4. RuntimeException과 RE가 아닌 것의 차이
5. 커스텀 예외 생성
1. 자바의 예외 처리
try-catch
- 일반적으로 예외를 처리하는 방법이다.
- try 내부에는 예외 발생 가능성이 있는 코드, catch 내부에는 try에서 예외 발생 시 처리할 코드를 작성한다.
- catch의 매개변수로는 예외의 종류를 사용하고, try 블록에서 발생한 예외를 인수로 받아 처리한다.
try {
// 예외 발생 가능성이 있는 코드
} catch(예외 종류) {
// 예외가 발생하면 처리할 코드
}
throw와 throws
- throw는 예외를 발생시키는 키워드다.
- 예외 클래스 객체를 만들고, thorw로 예외를 강제적으로 발생시킨다.
- throw가 발생시킨 예외는 상위 블럭이나 catch문으로 예외를 던진다.
- thorws는 예외를 떠넘기는 방법으로 메서드 호출 시 thorws 키워드로 정의가 되어 있다면 호출한 곳(상위 메소드)에서 강제적으로 예외를 처리해야 한다.
- throw와 throws 모두에 try-catch 문을 작성할 수도 있다.
public static void main(String[] args) {
try {
myException();
} catch(Exception e) {
e.printStackTrace();
System.out.println("Myclass에서 예외 발생");
}
}
static public void myException() throws Exception {
throw new Exception();
}
finally
- 반드시 실행되어야 하는 문장이다.
- try 문에서 일어난 일과 관계 없이 finally문을 실행한다.
try {
// 예외 발생 가능성이 있는 코드
} catch(예외 종류) {
// 예외가 발생하면 처리할 코드
} finally {
// 예외와 상관없이 무조건 실행되는 코드
}
2. 자바 예외 계층 구조
- 빨간색은 체크 예외로 반드시 예외를 처리하는 코드를 작성해야 한다.
- 파란색은 언체크 예외로 RuntimeException을 상속한 예외고, 예외 처리를 강제하지 않는다.
- 모든 예외는 Exception 클래스를 조상으로 둔다.
4. RuntimeExcption과 RE가 아닌 것의 차이
- RuntimeException 클래스들은 개발자의 실수에 의해 발생하는 예외들이다.
- 그 외의 Exception 클래스들은 외부 영향으로 발생할 수 있는 것들이다.
3. Exception과 Error의 차이
- 에러는 시스템 레벨에서 발생하는 문제로 서버의 과부하와 같이 개발자가 예측할 수 없다.
- StackOverflowError / OutOfMemoryError
- 예외는 개발자가 작성한 로직에서 발생하는 문제로 미리 예측하여 핸들링할 수 있다.
- NullPointerException / IndexOutOfBoundsException
5. 커스텀 예외
- 일반 예외는 Exception, 실행 예외는 RuntimeException을 상속 받아 구현한다.
- 보통 생성자는 매개 변수가 없는 기본 생성자와, 예외 메시지를 받는 String 매개 변수를 갖는 생성자 두 개를 선언한다.
- Exception 클래스를 상속하기 때문에 Exception이 가지고 있는 메소드들을 모든 예외 객체에서 호출할 수 있다.
- 주로 getMessage()와 printStackTrace()를 사용한다.
- getMessage() : 예외 발생 시 저장된 메시지를 리턴한다.
- printStackTrace() : 예외 발생 코드를 추적해 콘솔에 출력한다.
public class CustomException extends RuntimeException {
CustomException() { }
CustomException(String message) { super(message); }
}
public static void main(String[] args) {
try {
test();
} catch (CustomException e) {
System.out.println("커스텀 예외 발생");
System.out.println(e.getMessage());
e.printStackTrace();
}
}
static void test() throws CustomExeption {
thorw new CustomException("예외 테스트");
}
'Programming > JAVA' 카테고리의 다른 글
Te JAVA (6) - Enum (0) | 2023.11.10 |
---|---|
Te JAVA (5) - 멀티스레드 프로그래밍 (0) | 2023.11.01 |
Te JAVA (5) - 인터페이스 (1) | 2023.10.31 |
Te JAVA (3) - 자료구조 구현 (Binary Tree) (0) | 2023.10.13 |
Te JAVA (3) - 상속 (0) | 2023.10.13 |