자바 프로그램 컴파일시 발견하지 못하는 에러를 Runtime error 라고 한다. 이때 발생하는 에러를 어떻게 처리할지 개발자가 예외 처리로 핸들링 할 수 있다.
예외 처리
1. try catch 구문
예외가 발생했을 때 try ~ catch ~ finally 구문으로 예외를 처리하거나 throw로 메소드를 호출한 곳으로 던질 수 있다. 한 가지 중요한 점은 자바에서 모든 예외는 Exception 이라는 클래스를 상속받는다.
Exception : 컴파일 시 발생 (일반예외)
RuntimeException : 프로그램 실행 시 발생 (실행예외)
Exception의 상속 트리구조는 아래와 같다.
예외 처리하는 방식은 아래와 같다.
try {
//로직 수행 구문
}catch(Exception e){
//Exception 이 발생했을 때 로직
}finally{
// 예외 발생 여부 상관없이 수행되는 로직
}
2. throws
try catch 구문과 같이 예외를 처리하지않고 그냥 던질수도있다. 무슨 의미냐면 예외를 여기서 처리하지 않고 호출한 곳에러 처리를 전가하겠다는 의미이다. 또한 이 선언부를 보고 어떤 예외가 발생할 수 있는지도 알게한다.
public static void divide(int a,int b) throws ArithmeticException {
if(b==0) throw new ArithmeticException("0으로 나눌 수 없습니다");
int c=a/b;
System.out.println(c);
}
public static void main(String[] ar){
int a=10;
int b=0;
divide(a,b);
}
위 코드에서 divide()를 호출한 부분에서 에러 처리하도록한다. 왜냐면 divide 메소드에서 throws 예외를 처리함으로써 예외가 발생한 다음의 처리를 정의하지 않았기 때문이다. 따라서 ArithmeticException을 divide를 호출한 main에다가 던지는 것이다.(throw)
이 부분을 try catch로 처리하는 것은 아래와 같다.
try {
divide(a,b);
}catch(ArithmeticException e) {
e.getMessage();
e.printStackTrace();
}
예외 발생시 getMessage()를 통해 에러 메시지를 확인 할 수 있다.
3. 사용자 정의
사용자 정의 예외 클래스를 만들어서 개발자가 직접 정의한 예외를 처리할 수 있다.
일반 예외나 실행예외 중 하나로 만들 수 있다. 일반 예외는 Exception을, 실행 예외는 RuntimeException을 상속하면 된다.
public void insertTag(String tag) {
try {
tagDao.insertTag(tag);
} catch (DuplicateKeyException e) {
System.out.println(e.getStackTrace());
System.out.println(e.getCause());
throw new DuplicateTagNameException("Duplicate tag name");
}
위 코드는 DuplicateKeyException이 발생했을 경우 사용자가 정의한 DuplicateTagNameException이라는 클래스로 예외 처리하게끔 구현한 코드이다. DuplicateTagNameException의 예외 처리는 GlobalExceptionHandler라는 것을 만들어 모든 예외를 모이게 한 다음 적절한 응답을 클라이언트에 보내게 할 수 있다.
참고:
https://reakwon.tistory.com/155
'스터디 > JAVA' 카테고리의 다른 글
[JAVA] CollectionUtils.isEmpty() 사용법 및 예시 (0) | 2023.02.12 |
---|---|
[JAVA] StringUtils.isBlank()와 StringUtils.isEmpty() 차이 (0) | 2023.02.11 |
[JAVA] Primitive Type 과 Wrapper Class (0) | 2021.08.15 |
[JAVA] 객체 지향 설계 SOLID (0) | 2021.07.02 |
[JAVA] 자바 오류, 에러 (Error) 종류 (0) | 2021.05.30 |
댓글