본문 바로가기
스터디/JAVA

[JAVA] 자바 예외 처리 (Exception)

by zoodi 2021. 8. 20.
728x90

자바 프로그램 컴파일시 발견하지 못하는 에러를 Runtime error 라고 한다. 이때 발생하는 에러를 어떻게 처리할지 개발자가 예외 처리로 핸들링 할 수 있다.

 

예외 처리

1. try catch 구문

예외가 발생했을 때 try ~ catch ~ finally 구문으로 예외를 처리하거나 throw로 메소드를 호출한 곳으로 던질 수 있다. 한 가지 중요한 점은 자바에서 모든 예외는 Exception 이라는 클래스를 상속받는다.

Exception : 컴파일 시 발생 (일반예외)

RuntimeException : 프로그램 실행 시 발생 (실행예외)

 

Exception의 상속 트리구조는 아래와 같다.

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

 

[자바] 이것만 알면 예외(Exception) 정복 - 예제를 통한 개념과 예외 처리 방법

예외(Exception) 프로그램을 실행하다가 보면 어떤 원인때문에 비정상적인 동작을 일으키며 프로그램이 종료되는 상황을 보신적 있으실 겁니다. 이때 우리는 프로그램이 오류가 발생했다고 합니

reakwon.tistory.com

 

728x90

댓글