반응형
예외와 예외 클래스
- 자바에는 에러 이외에 예외라고 부르는 오류가 있고 예외가 발생되면 프로그램은 곧바로 종료할 수도 있고 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.
- 예외는 일반 예외(Exception)와 실행 예외(Runtime Exception)가 있다
- 일반 예외는 컴파일 예외라고도 하며 컴파일 과정에서 예외 처리 코드가 필요한지 검사한다.
- 실행 예외는 컴파일하는 과정에서 예외 처리 코드를 검사하지 않는 예외를 말한다.
실행 예외
- 자바 컴파일러가 체크하지 않기 때문에 오로지 개발자의 경험에 의해서 예외 처리 코드를 삽입해야 한다.
- NullPointerException
- null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생하는데 객체가 없는 상태에서 객체를 사용하려고 해서 예외가 발생한다.
- ArrayIndexOutOfBoundsException
- 배열에서 인덱스 범위를 초과하여 사용할 경우 실행 예외가 발생한다.
- NumberFormatException
- 문자열로 되어 있는 데이터를 숫자로 변경할 때 숫자로 반환될 수 없는 문자가 포함되면 실행 예외가 발생한다.
- ClassCastException
- 상위 클래스와 하위 클래스 간에 타입 변환이 일어날 때 억지로 타입 변환을 시도한 경우에 실행 예외가 발생한다.
예외 처리 코드
- 프로그램에서 예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드를 예외 처리 코드라고 한다.
try {
예외 발생 가능 코드
} catch(예외클래스 e) {
예외 처리;
} catch(예외클래스 e) { // 다중 catch문 가능
예외 처리;
} catch(예외클래스 | 예외클래스 e) { // 멀티 catch문 가능
예외 처리;
} finally {
항상 실행; // 반드시 실행해야 하는 구문 => 파일 닫기
}
예외 떠넘기기
- 메서드 내부에서 예외가 발생할 수 있는 코드를 작성할 때 try-catch 블록으로 예외를 처리하는 것이 기본이지만, 경우에 따라서는 메서드를 호출한 곳으로 예외를 떠넘길 수도 있다.
- throws 키워드를 사용하며 메서드 뒤에는 넘길 에외 클래스를 쉼표로 구분해서 나열해주면 된다.
- 리턴타입 메서드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... {}
public void method1() {
try {
method2(); // 호출 위치
} catch(ClassNotFoundExcpetion e) {
System.out.println("클래스가 존재하지 않습니다.");
}
}
public void method2() throws ClassNotFoundException { // 호출한 곳에서 예외처리 하도록 함
Class claszz = Class.forName("java.lang.Strin2");
}
사용자 정의 예외와 예외 발생
- 일반 예외로 선언할 경우 Exception을 상속하면 되고, 실행 예외로 선언할 경우에는 RuntimeException을 상속하면 된다.
public class XXXException extends [ Exception | RuntimeException] { // 사용자 정의 예외
public XXXException() {}
public XXXException(String message) { super(message); }
}
public void method() throws XXXException {
throw new XXXException("메세지");
}
예외 정보 얻기
- e.getMessage()와 e.printStackTrace()를 사용할 수 있다.
반응형
'개발(합니다) > Java&Spring' 카테고리의 다른 글
[java-기초-11-01] 기본 API 클래스 (4) | 2021.01.12 |
---|---|
[java-기초-06-부록] 애너테이션 (4) | 2021.01.11 |
[java-기초-09] 중첩 클래스와 중첩 인터페이스 (0) | 2021.01.07 |
[java-기초-08] 인터페이스 (0) | 2021.01.06 |
[java-기초-07] 상속 (0) | 2021.01.05 |