본문 바로가기

Java

예외 : try-catch-finally

try-catch-finally문

예외 처리 코드는 try-catch-finally블록을 이용해서 일반 예외와 실행 예외가 발생할 경우 예외 처리할 수 있도록 해준다.

try{
	예외 발생 가능 코드
}catch(예외 클래스 e){
	예외 처리
}finally{
	항상 실행
}

일반 예외 처리는 컴파일러 과정에서 발생하기 때문에, 이클립스 빨간 밑줄을 그어 예외 처리 필요성을 알려준다.

public class TryCatchFinallyRuntimeException{
	public static void main(String[] args){
		String data1 = "안녕";
		String data2 = "감사합니다";
		try{
			int value1 = Integer.parseInt(data1);
			int value2 = Integer.parseInt(data2);
			int result = value1 + value2;
			System.out.println("결과 값"+result);
		}catch(NumberFormatException e){
			Systme.out.println("숫자로 변환할 수 없습니다");
		}finally{
			System.out.println("다시 실행하세요");
		}
	}
}

해당 코드를 실행시키면 "숫자로 변환할 수 없습니다"와 "다시 실행하세요"가 찍힌다. 여기서는 문자를 숫자로 변환하려고 했기 때문에 예외가 발생했다. 숫자 포맷과 관련 된 예외가 발생한 것(NumberFormatException e) finally는 성공하든, 실패하든 실행된다.

다중 catch

try-catch문 안에 다양한 예외가 발생할 수 있다. 다중 catch 블록을 작성하면 좋다.

try{

	ArrayIndexOutofBoundsException 발생!할 경우 예외 처리 1

	NumberFormatException 발생!할 경우 예외 처리 2

	----- Exception 나머지 모든 예외? 예외 처리 3

}catch(ArrayIndexOutOfBoundsException e){
	예외 처리1
}catch(NumberFormatException e){
	예외 처리2
}catch(Exception e){
	예외 처리3
}

모든 예외는 Exception클래스를 상속하고 있어서 Exception e로 모든 예외를 처리할 수 있다.

이 때 순서가 중요하다.

try{

	ArrayIndexOutofBoundsException 발생!

	NumberFormatException 발생!

	----- Exception 나머지 모든 예외! 

}catch(Exception e){
	예외 처리1
}catch(NumberFormatException e){
	예외 처리2
}catch(ArrayIndexOutOfBoundsException e){
	예외 처리3
}

이 경우 ArrayIndexOutOfBoundsException도, NumberFormatException도 Exception도 모두 예외 처리1만 실행한다. 예외 처리2, 3은 실행이 되지 않는다. 각 예외 경우마다 다른 방식으로 처리 해줘야 하는데 문제가 생길 수 있다. 예외 걸러지는 순서를 잘 생각해야 한다.

멀티 catch

만약 NumberFormatException와 ArrayIndexOutOfBoundsException를 동시에 처리하고 싶다?

try{

	ArrayIndexOutofBoundsException 발생!할 경우 예외 처리 1

	NumberFormatException 발생!할 경우 예외 처리 1

	----- Exception 나머지 모든 예외? 예외 처리 3

}catch(ArrayIndexOutOfBoundsException | NumberFormatException e){
	예외 처리1
}catch(Exception e){
	예외 처리3
}

반응형

'Java' 카테고리의 다른 글

예외 : 예외 떠넘기기  (0) 2021.03.25
예외 : try-with-resource  (0) 2021.03.25
예외 : 예외와 예외 클래스  (0) 2021.03.25
어노테이션(Annotation)  (0) 2021.03.11
static과 싱글톤  (0) 2021.03.11